发送 SIGCONT 后,停止的进程不会继续工作

发送 SIGCONT 后,停止的进程不会继续工作

cat从终端开始:

$ cat

然后在第二个终端我发送停止信号:

$ kill -SIGSTOP $(pgrep cat)

一切正常 -cat停止了。现在我想通过发送以下命令来唤醒此cat进程SIGCONT

$ kill -SIGCONT $(pgrep cat)

什么都没发生。但是如果我fg在第一个 shell 中使用cat,则会被唤醒。为什么SIGCONT不继续cat执行?

答案1

在 shell 中按下“ctrl-Z”会向当前前台进程发送信号,从而暂停该进程STOP。我相信,这还会导致进程的标准输入与 shell 分离 - 现在它已成为后台进程。

bg命令CONTINUE向命令发送信号,但不会将其标准输入重新连接到 shell。由于 cat 正在等待标准输入,因此它保持停止状态。正如您所提到的,该fg命令确实将标准输入重新连接到 shell。

当你STOP向你的进程发送信号时,shell 会通过 CHILD 信号收到通知并将其置于后台,然后发生同样的事情。

当你按下“ctrl-Z”时你可以看到差异:

[1]  + 8336 suspended  cat

当您STOP手动发送信号时:

[1]  + 8336 suspended (signal)  cat

相关内容