ose*_*000 3 bash session sighup
让我惊讶的是,至少从 Bash 4.4.19 开始,Interactive Bash 在单独的会话中运行命令,运行后请参阅以下进程列表sleep 8888
:
PGID PID PPID
3150071 3150071 252603 -bash
3194323 3194323 3150071 sleep 8888
Run Code Online (Sandbox Code Playgroud)
您可以看到PGID
ofsleep
不等于 bash,而其 PPID 等于。
测试在 Ubuntu Bionic 上完成。
有关于这种行为改变的任何文档吗?或者从一开始就一直如此?
在单独的会话中运行命令意味着 bash 退出时根本不会发生 SIGHUP 效果,也许这就是为什么https://www.sobyte.net/post/2022-04/linux-nohup-setsid-disown/#about -说
事实上,在较新版本的 bash 上,bash 不会向后台程序发送 SIGHUP 命令。这意味着任何在后台运行的以 & 结尾的进程都不会被终端退出的 SIGHUP 信号退出。
编辑:我应该使用术语“进程组”而不是“会话”。
严格来说,具有作业控制的交互式 Bash 在单独的进程组而不是会话中运行命令:
\n SESS PGID PID PPID COMMAND\n1082760 3784151 3784151 1082760 bash\n1082760 3784782 3784782 3784151 sleep 120\n
Run Code Online (Sandbox Code Playgroud)\n据我所知,情况一直如此(至少自 Bash 2.0 以来);我无法在 Bash 变更日志中\xe2\x80\x99 找到相关变更的引用。当启用作业控制时,bash 需要能够在用户按下 时将管道移动到后台CtrlZ;为此,它在不同的进程组中运行每个管道。
\n请参阅Bash 手册中有关作业控制的部分。正如信号部分所述,Bash 显式地向相关进程组重新发送信号;情况也一直如此。
\n