0

我确信这真的很简单,但无论如何它都在咬我的脸,我有点沮丧和难过。

所以,我有一个脚本,我设法归结为:

#!/bin/sh
sleep 50 | echo

如果我在命令行运行它,然后按 Ctrl-C 它会停止,就像我期望的那样。

如果我使用 kill 发送信号,它什么也不做。我觉得这很奇怪,因为我认为那些应该是一样的。

然后,如果我发送它 sigterm,那么它也会死掉,但是如果我在 ps 中查看,sleep 仍在运行。

我在这里错过了什么?

这显然不是真正的运行 python 的脚本,而且当它在 start-stop-daemon 试图杀死守护进程后继续运行时,问题就更大了。

帮助我的人。我很笨。

4

2 回答 2

1

发生这种情况的原因是 Ctrl-C 被传递到睡眠进程,而您发送的信号仅被传递到脚本本身。有关详细信息,请参阅子进程接收父进程的 SIGINT

strace -p您可以在点击 ctrl-c 或发送 sigint 时使用自己验证这一点;strace 会告诉你传递了什么信号。

编辑:我不认为你是愚蠢的。流程及其工作原理看似简单,但细节往往很复杂,甚至专家也会被这种事情搞糊涂。

于 2014-08-07T18:48:28.590 回答
0

我做了同样的事情,我编写了名为 test.sh 的脚本,下面包含了。

#!/bin/sh
sleep 50 | echo

执行后,我做了 Ctrl-C->它的工作正常意味着关闭它。再次执行,在另一个终端中,我ps -ef|grep test.sh在找到 pid 后检查了 PID,我做了kill <pid>并且它杀死了进程,再次验证我执行了ps -ef|grep test.sh并且没有得到任何 pid。

于 2014-08-07T18:36:33.060 回答