什麼是雙分叉?

什麼是雙分叉?

如何分叉一個在 shell 退出時不會終止的進程?談「雙分叉」:

  • 雙倍的fork()- :

    (emacs &)
    

    大括號內的命令( )在單獨的 shell 進程中執行。

您能否解釋一下為什麼這與簡單的emacs &.首先在子 shell 環境中運行它有什麼意義?

答案1

您能否解釋一下為什麼這與簡單的emacs &.

(emacs &)運行一個子 shell,然後emacs &在其內部運行,這意味著它的stdinstdout、 和stderr被綁定到子 shell 上。它會變成雙叉,並且會在最初的外殼((emacs &)運行的地方)死亡後倖存下來。僅運行emacs &將使stdinstdout、 和stderr與初始 shell 綁定。

emacs實際上這是一個不好的例子,因為 GUI 版本不會在乎它遺失了stdin, stdout, 和stderr。您可以嘗試使用(ls -R / &); exit然後 grep 來查看它是否仍在運行。 歡迎編輯提供比 更好的範例ls

首先在子 shell 環境中運行它有什麼意義?

將其與初始外殼完全分離(見上文)。

相關內容