我确定这很简单,但无论如何它都让我咬了一口,我有点沮丧和难过。
所以,我有一个脚本,我已经设法归结为:
#!/bin/sh
sleep 50 | echo
如果我在命令行运行它,然后点击Ctrl-C就会停止,就像我期望的那样。
如果我发送sigint,使用kill,它什么都不做。 我觉得这很奇怪,因为我觉得那些应该是一样的。
然后,如果我发送它sigterm,那么它也会死掉,但如果我查看ps,睡眠仍在运行。
我在这里错过了什么?
这显然不是运行python的真实脚本,而且在start-stop-daemon试图杀死守护进程后它继续运行时会出现更多问题。
帮助我的人。我很蠢。
答案 0 :(得分:1)
发生这种情况的原因是Ctrl-C被传递到睡眠过程,而您发送的sigint仅传递给脚本本身。有关详细信息,请参阅Child process receives parent's SIGINT。
您可以在点击ctrl-c或发送sigint时使用strace -p
自行验证; strace会告诉你传递了什么信号。
答案 1 :(得分:0)
我做了同样的事情,我写了一个名为test.sh的脚本,其中包含以下内容。
#!/bin/sh
sleep 50 | echo
执行后,我做了Ctrl-C
- >工作正常意味着关闭它。
再次执行并在另一个终端中我在找到pid之后通过ps -ef|grep test.sh
检查了PID,我做了kill <pid>
并且它杀死了进程,再次验证我执行ps -ef|grep test.sh
并且没有得到任何pid。