firefox&
打开一个新终端并在里面输入命令,ps -l
给出:
4 R 1000 23132 23104 99 80 0 - 2177945 - pts/27 00:00:07 firefox
如果使用该命令关闭 shell exit
,则 firefox 子进程保持打开状态!
总是这样吗?Firefox 不应该也关闭吗?最近的内核中是否有新的东西或我缺少的东西?
结果ps -el|grep firefox
是:
4 S 1000 23132 1 14 80 0 - 2233312 poll_s ? 00:00:21 firefox
PPID 已更改为 1。
是什么导致此 PPID 更改为 1 ?
编辑:哦,我刚刚意识到关闭终端和关闭 shell 有非常不同的结果:关闭终端确实关闭了所有子进程,但不是当 shell 用 exit 命令关闭时......不知道为什么。(关闭终端正在向所有子进程发送 SIGTERM ?但关闭 shell 会留下孤儿?)
不,如果一个进程退出,它的子进程继续运行,他们的父进程只是被更改为
init
(PID 1)。或其他一些与系统相关的进程,例如在 Linux 上查找“子收割机”。情况一直如此,它允许
nohup
有效地工作,以及通过两次分叉、调用setsid()
和退出父进程将进程变成守护进程的陈旧进程。关闭终端会话可能会发送
SIGHUP
到那里的剩余进程,但他们可以自由地忽略它(这就是这样nohup
做的)。此外,systemd
可以配置为在终端登录会话退出时终止任何挥之不去的进程,但您可能是firefox
从终端仿真器在 X 中运行,因此不适用。