Was ist Double Forking?

Was ist Double Forking?

Wie erstelle ich einen Fork-Prozess, der nicht beendet wird, wenn die Shell beendet wird?spricht über „Double Forking“:

  • Doppelt- fork():

    (emacs &)
    

    Befehle in Klammern ( )werden in einem separaten Shell-Prozess ausgeführt.

Können Sie erklären, warum das im Vergleich zu einem einfachen einen Unterschied machen würde emacs &? Welchen Sinn hätte es überhaupt, es in einer Subshell-Umgebung auszuführen?

Antwort1

Können Sie erklären, warum das im Vergleich zu einem einfachen einen Unterschied machen sollte emacs &?

(emacs &)führt eine Untershell aus, die dann emacs &in ihr ausgeführt wird, was bedeutet, dass ihre stdin, stdout, und stderrstattdessen an die Untershell gebunden sind. Sie wird doppelt gegabelt und überlebt (emacs &)das Sterben der ursprünglichen Shell (auf der sie ausgeführt wurde). Wenn sie nur ausgeführt wird, emacs &bleiben die stdin, stdout, und stderran die ursprüngliche Shell gebunden.

emacsist eigentlich ein schlechtes Beispiel dafür, weil die GUI-Version sich nicht darum kümmert, dass stdin, stdout, und verloren gegangen sind stderr. Sie können es mit versuchen (ls -R / &); exitund dann mit grep danach suchen, um zu sehen, dass es noch läuft. Änderungen für ein besseres Beispiel als sind willkommen ls.

Welchen Sinn hätte es überhaupt, es in einer Subshell-Umgebung auszuführen?

Um es vollständig von der Ausgangshülle zu lösen (siehe oben).

verwandte Informationen