当我作为后台进程运行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时,它也可以正常工作。
这里发生什么事情?提前谢谢。
发布于 2021-10-14 05:00:24
当你跑的时候
cat &你应该看到一条留言说
[1]+ Stopped cat此后不久(可能有不同的工作编号)。这是因为cat试图从它的标准输入中读取,所以当它在后台运行时,它最终会被停止。
已停止的进程不会接收其他信号SIGKILL直到恢复(续)。这里所发生的事情是:您的SIGTERM只有在进程继续时才被交付,而当您将它返回到前台时才会这样做。
https://unix.stackexchange.com/questions/673156
复制相似问题