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:
- Sendet Befehlszeilenargumente an die laufende Instanz mitIPC
- 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.