首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >薛定谔猫

薛定谔猫
EN

Unix & Linux用户
提问于 2021-10-14 04:41:44
回答 1查看 101关注 0票数 0

当我作为后台进程运行cat命令时,

代码语言:javascript
复制
$ cat &

然后杀了它,

代码语言:javascript
复制
$ killall -v cat

它说它用15号信号杀死了猫,但那只猫只是被阻止了。在运行$ ps时,我看到它仍然在运行。直到我打电话给$ fg,它才最终被终止。

这似乎与等待输入有关,因为在c++中模拟cat时,

代码语言:javascript
复制
string line;
while(getline(cin, line))
   cout << line << endl;

同样的事情也会发生,但是对于一个简单的while(true);循环,这个进程会被成功地杀死。

这似乎也是必要的,因为它是一个后台进程,因为当我运行$ cat和另一个终端$ killall -v cat时,它也可以正常工作。

这里发生什么事情?提前谢谢。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-10-14 05:00:24

当你跑的时候

代码语言:javascript
复制
cat &

你应该看到一条留言说

代码语言:javascript
复制
[1]+  Stopped                 cat

此后不久(可能有不同的工作编号)。这是因为cat试图从它的标准输入中读取,所以当它在后台运行时,它最终会被停止。

已停止的进程不会接收其他信号SIGKILL直到恢复(续)。这里所发生的事情是:您的SIGTERM只有在进程继续时才被交付,而当您将它返回到前台时才会这样做。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/673156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档