ダブルフォークとは何ですか?

ダブルフォークとは何ですか?

シェルが終了しても終了しないプロセスをフォークするにはどうすればよいですか?「ダブルフォーク」について語ります:

  • ダブルfork()

    (emacs &)
    

    中括弧内のコマンドは( )別のシェル プロセスで実行されます。

単純な と比べて、なぜそれが違いを生むのか説明していただけますかemacs &。そもそも、サブシェル環境でそれを実行する意味は何でしょうか?

答え1

単純な と比べて、なぜそれが違いを生むのかを説明していただけますかemacs &

(emacs &)はサブシェルを実行し、サブシェルはemacs &サブシェル内で実行されます。つまりstdin、、、stdoutおよびはstderrサブシェルに結び付けられます。これは二重にフォークされ、最初のシェル (が実行されたシェル) が終了しても存続します(emacs &)。のみを実行すると、、、およびが最初のシェルに結び付けられたemacs &ままになります。stdinstdoutstderr

emacsstdinは、実際にはこれの悪い例です。GUI バージョンでは、、、stdoutおよびが失われたことは気にしないからですstderr。 を試して(ls -R / &); exitから grep で検索すると、まだ実行中であるかどうかがわかります。 より良い例については編集を歓迎しますls

そもそもサブシェル環境で実行する意味は何でしょうか?

初期シェルから完全に切り離します (上記参照)。

関連情報