首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SIGHUP奇怪行为

SIGHUP奇怪行为
EN

Unix & Linux用户
提问于 2021-10-15 06:58:33
回答 1查看 472关注 0票数 0

上下文:

我从bash运行一个进程,没有&,也没有任何重定向,比如./foo。该进程正在运行while(1),即它将永远运行。此外,该进程忽略了SIGHUP,即当它得到它时不终止。

当我将SIGHUP发送到bash进程时,它也会向我的进程发送一个SIGHUP。我的过程,反过来,只是记录信号,并继续它的工作。

My理解:

我对SIGHUP的理解是从这里的答案中建立起来的。我所理解的是,在我的例子中,bash进程应该被阻塞而不是终止。

问题:

但事实并非如此。当我的进程继续进行时,bash进程确实会终止。但是现在,/lib/systemd/systemd --user不再是D13进程,而是成为了新的父进程。

Environment和其他细节:

代码语言:javascript
复制
Linux lap-0117 5.4.0-87-generic #98~18.04.1-Ubuntu SMP Wed Sep 22 10:45:04 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
EN

回答 1

Unix & Linux用户

发布于 2021-10-15 09:22:54

这是正常的。

外壳终止,因为当控制终端离开时,SIGHUP通常被发送到shell (即资源撤销接口,我们在Unix中仅有的几个接口之一),而没有终端的shell没有意义。

外壳本身处理SIGHUP,信号处理程序将SIGHUP转发给所有后台进程,因此它们也被告知控制终端已经消失。任何离开默认处理程序的进程都将在这里终止,通常这些都是需要终端的shell命令。

例如,当您使用tail -f查看日志文件,然后关闭终端窗口时,此机制就会清除。在其中运行的shell和tail命令都变得毫无用处,因为它们没有可与之交互的终端,因此它们也被终止。

通常,“孤立的”进程附加到PID 1,因为这是唯一可以在任何时候处理SIGCHLD并收集子进程的退出代码的进程。据推测,systemd在这里做了一些有趣的事情,将其附加到systemd的用户实例上,这也履行了这个契约。

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

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

复制
相关文章

相似问题

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