我想使用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 100kill -SIGSTOP $pid_of_the_sleep_proc[1]+ Stopped sleep 100kill -SIGCONT $pid_of_the_sleep_proc// nothing happened after sending the SIGCONT signal
然而,bash的内置命令fg可以很好地解决睡眠问题
sleep 100kill -SIGSTOP $pid_of_the_sleep_proc[1]+ Stopped sleep 100kill -SIGCONT $pid_of_the_sleep_procfg 1// the sleep process woke up after the fg command
所以我的问题是为什么kill -SIGCONT在睡眠中不起作用,为什么fg起作用。顺便说一下,我在我的Ubuntu13.10x86-64PC上运行这些测试。提前谢谢。

最佳答案

你怎么知道发送SIGCONT不会唤醒睡眠过程?你期望会发生什么?
fg命令唤醒进程并将其带到前台(因此fg)。
bg命令唤醒进程并将其带到后台(因此bg)。
在实现细节中,shell在前台使用wait-on进程,而在后台不使用wait-on进程。
所以在SIGCONT之后你的睡眠可能继续在后台运行。发送SIGCONT后,您可以等待100秒,然后sleep命令应该已经终止,您应该会收到一个通知(立即或在按return之后,具体取决于shell的配置)。

关于linux - kill -SIGCONT不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22865261/

10-11 15:37