当我将 cat 命令作为后台进程运行时,
$ cat &
然后尝试杀死它,
$ killall -v cat
它说它用信号 15 杀死了猫,但这只猫只是被停止了。运行后$ ps
,我看到它仍在运行。直到我打电话$ fg
,它才最终被终止。
好像和等待输入有关,因为在c++中模拟cat的时候,
string line;
while(getline(cin, line))
cout << line << endl;
同样的事情发生了,但是对于一个简单的while(true);
循环,该进程被成功杀死。
它似乎也是一个后台进程,因为当我$ cat
在另一个终端运行时$ killall -v cat
它也可以正常工作。
这里发生了什么?提前致谢。
当你跑
你应该看到一条消息说
此后不久(可能有不同的工作编号)。这是因为
cat
试图从它的标准输入中读取,所以当它在后台运行时,它最终会被停止。SIGKILL
停止的进程在恢复(继续)之前不会收到信号。这就是这里发生的事情:SIGTERM
只有在进程继续时才会交付,当您将其返回到前台时会发生这种情况。