我对Linux进程有一个疑问
情况 1:(此处没有打开 Firefox)
假设我使用此命令从命令终端打开 Firefox,firefox &
那么进程将在后台启动。
现在,如果我退出终端 Firefox 也会退出
情况 2:(此处已打开一个 Firefox)
现在,如果我使用此命令从命令终端打开 Firefox,firefox &
那么进程将在后台启动。
但是现在如果我退出终端,第二个 Firefox(通过终端打开)什么也不会发生,为什么?
在情况 1 中它将关闭,在情况 2 中会发生什么?
答案1
在情况 2 中,几乎发生了相同的事情。不同之处在于 Firefox 是一个单实例应用程序,如果在启动时发现其副本正在运行,则会执行以下操作:
- 使用以下方式将命令行参数发送到正在运行的实例工业控制计算机
- 退出
这是一种简化的算法,因为一些参数可能导致其他行为,但大多数时候都如上发生。
因此,在第二种情况下,后台进程存在的时间不到一秒,而之前启动的 Firefox 实例继续独立于终端运行。
答案2
在情况 1 中,你启动一个与终端“绑定”的全新 Firefox 进程,然后终止该终端,随后终止所有绑定的进程
在情况 2 中,即使您通过调用 & 启动 FF(在后台),FF 也已经打开了一个主进程,并且新窗口将作为另一个进程的“子进程”打开,因此,新窗口将绑定到该进程而不是终端。因此,终止终端仍然会终止所有绑定进程,而不是 ff,因为 ff 不是“他的”子进程