什么是双重分叉?

什么是双重分叉?

如何分叉一个当 shell 退出时不会终止的进程?讨论“双重分叉”:

  • 双倍的fork()- :

    (emacs &)
    

    括号内的命令( )在单独的 shell 进程中运行。

您能解释一下为什么与简单的相比,这会有什么不同吗emacs &?首先,在子 shell 环境中运行它有什么意义?

答案1

你能解释一下为什么这与简单的相比会有什么区别吗emacs &

(emacs &)运行一个子 shell,然后emacs &在其内部运行,这意味着它的stdinstdoutstderr被绑定到子 shell。它变为双分叉,并将在初始 shell((emacs &)运行的位置)消亡后继续存在。仅运行emacs &将使stdinstdoutstderr绑定到初始 shell。

emacs这实际上是一个坏例子,因为 GUI 版本不会在意它丢失了stdinstdoutstderr。您可以尝试使用(ls -R / &); exit,然后使用 grep 查看它是否仍在运行。 欢迎编辑以提供比 更好的示例ls

首先,在子 shell 环境中运行它有什么意义呢?

将其与初始壳完全分离(见上文)。

相关内容