我相信这真的很简单,但不管怎样,这让我很痛苦,我有点沮丧和困惑。
所以,我有一个脚本,我把它归结为:
#!/bin/sh
sleep 50 | echo如果我在命令行运行这个命令,然后按下Ctrl,它就会停止,就像我所期望的那样。
如果我给它发送信号,用杀死,它什么也不做。我觉得这很奇怪,因为我觉得应该是一样的。
然后,如果我发送它,它也会死,但是如果我查看ps,睡眠仍然在运行。
我漏掉了什么这里?
这显然不是真正的脚本,它运行python,而且在启动-停止-守护进程试图杀死守护进程之后继续运行更大的问题。
帮助我的人。我是哑巴。
发布于 2014-08-07 18:48:28
发生这种情况的原因是,Ctrl被传递到睡眠进程,而您要发送的sigint只传递给脚本本身。有关此问题的详细信息,请参阅Child process receives parent's SIGINT。
您可以在点击ctrl或发送sigint时使用strace -p来验证这一点;strace会告诉您传递了哪些信号。
编辑:我不认为你是个傻瓜。过程和它们的工作方式看起来很简单,但是细节往往很复杂,甚至专家也会对这种事情感到困惑。
发布于 2014-08-07 18:36:33
我所写的脚本名为test.sh,下面是containt。
#!/bin/sh
sleep 50 | echo执行之后,我完成了Ctrl-C -> --它的工作良好意味着关闭它。再次执行,在另一个终端中,我通过ps -ef|grep test.sh检查pid,在找到PID后,我执行了kill <pid>,它杀死了进程,再次验证我执行了ps -ef|grep test.sh,没有得到任何pid。
https://stackoverflow.com/questions/25189563
复制相似问题