kill -SIGCONT不起作用

时间:2014-04-04 14:14:41

标签: linux bash signals

我想使用SIGTSTP(或SIGSTOP)暂停进程并稍后使用SIGCONT恢复进程。 SIGTSTP和SIGSTOP正如预期的那样工作,但SIGCONT有时不会唤醒已停止的进程。

例如: SIGCONT适用于find命令:

find / kill -SIGSTOP $pid_of_the_find_proc [1]+ Stopped find / kill -SIGCONT $pid_of_the_find_proc // find / woke up

但是当我用sleep命令测试它时,它就失败了。

sleep 100 kill -SIGSTOP $pid_of_the_sleep_proc [1]+ Stopped sleep 100 kill -SIGCONT $pid_of_the_sleep_proc // nothing happened after sending the SIGCONT signal

但是,bash的内置命令fg可以很好地适应睡眠

sleep 100 kill -SIGSTOP $pid_of_the_sleep_proc [1]+ Stopped sleep 100 kill -SIGCONT $pid_of_the_sleep_proc fg 1 // the sleep process woke up after the fg command

所以我的问题是为什么kill -SIGCONT不适用于睡眠,为什么fg有效。顺便说一句,我在我的Ubuntu 13.10 x86-64 pc上运行这些测试。提前谢谢。

1 个答案:

答案 0 :(得分:1)

你怎么知道发送SIGCONT不会唤醒睡眠过程?你期望发生什么? fg命令唤醒进程并将其带到前台(因此fg)。 bg命令唤醒进程并将其带到后台(因此为bg)。

在实现细节中,shell在前台使用wait进程,而不在后台使用wait进程。

因此,在SIGCONT之后,您的睡眠可能会继续在后台运行。您可以在发送SIGCONT后等待100秒,然后睡眠命令应该已经终止,您应该收到通知(立即或按下返回后,具体取决于您的shell的配置)。