Verwirrung im Linux-Prozess

Verwirrung im Linux-Prozess

Ich habe einen Zweifel im Linux-Prozess

Fall 1: (hier ist kein Firefox geöffnet)

Angenommen, wenn ich mit diesem Befehl einen Firefox vom Eingabeaufforderungsterminal aus öffne, firefox &wird der Prozess im Hintergrund gestartet.

Wenn ich jetzt das Terminal beende, wird auch Firefox beendet

Fall 2: (hier ist bereits ein Firefox geöffnet)

Wenn ich jetzt mit diesem Befehl einen Firefox vom Eingabeaufforderungsterminal aus öffne, firefox &wird der Prozess im Hintergrund gestartet.

Aber wenn ich jetzt das Terminal verlasse, passiert im zweiten Firefox (der vom Terminal geöffnet wird) nichts. Warum?

Im Fall 1 wird es geschlossen, was passiert im Fall 2?

Antwort1

Im zweiten Fall passiert fast das Gleiche. Der Unterschied besteht darin, dass Firefox eine Einzelinstanzanwendung ist und beim Start feststellt, dass seine Kopie ausgeführt wird, und Folgendes tut:

  1. Sendet Befehlszeilenargumente an die laufende Instanz mitIPC
  2. Ausgänge

Dies ist ein vereinfachter Algorithmus, da einige Argumente zu anderem Verhalten führen können, aber meistens läuft alles wie oben beschrieben ab.

Im zweiten Fall existiert der Hintergrundprozess also weniger als eine Sekunde, während die zuvor gestartete Firefox-Instanz unabhängig vom Terminal weiterläuft.

Antwort2

Im ersten Fall starten Sie einen brandneuen Firefox-Prozess, der an das Terminal „gebunden“ ist. Dadurch wird das Terminal beendet und anschließend werden alle angebundenen Prozesse beendet.

Im zweiten Fall, selbst wenn Sie FF starten und das & (im Hintergrund) aufrufen, hat FF bereits einen Masterprozess geöffnet und das neue Fenster wird als „Kind“ des anderen geöffnet, also an diesen und nicht an das Terminal gebunden. Daher werden durch das Beenden des Terminals auch alle gebundenen Prozesse beendet, nicht FF, das nicht „sein“ Kind ist.

verwandte Informationen