Ich habe aus dem Buch Modern Operating Systems gelesen , dass die Shell beim Ausführen eines Befehls einen untergeordneten Prozess erstellt, darauf wartet, bis das untergeordnete Element die Ausführung abgeschlossen hat, und dann auf einen anderen Befehl vom Benutzer wartet. Dies ist in der Tat bei vielen Programmen wie z gedit
. Das Terminal nimmt keine Befehle an, bis ich geschlossen habe gedit
. Wenn ich jedoch den Atomcode -Editor öffne , kehrt die Shell sofort zurück und ist bereit, den nächsten Befehl zu akzeptieren, auch wenn der Editor ausgeführt wird. Durch Schließen des Terminals wird atom nicht geschlossen. Bedeutet dies, dass der Editor nicht als untergeordneter Prozess geöffnet wurde? Was ist der zugrunde liegende Mechanismus, der dies ermöglicht?
Laufen ps au | grep atom
gibt
<username> 8042 0.0 0.0 15944 2264 pts/1 S+ 00:55 0:00 grep --color=auto atom
quelle
ps au | grep atom
im Terminal die Ausgabe Ihrer Frage hinzufügen?Antworten:
Die Frage betrifft zwei Arten von Programmen:
Im ersten Fall werden Programme, die mit dem Benutzer in der Shell interagieren, vollständig ausgeführt, bevor die Steuerung an die Shell zurückgegeben wird. Es wird nichts Besonderes getan.
Der zweite Fall ist komplizierter. Typischerweise wird das Programm Gabel (eine Kopie von mir in Erinnerung zu machen), und ordnet ihre Assoziation mit dem Shell entfernen Steueranschluss und kann ausgeführt werden, ein anderes Programm - die unabhängig von der ursprünglichen Schale verläuft. Möglicherweise sehen Sie Nachrichten aus dem zweiten Programm, aber normalerweise interagiert es nicht mit Ihnen. Je nachdem, wie es verwendet wird, können Sie haben
Weitere Lektüre:
quelle
daemon
Bibliotheksfunktion ausgeführt, die all dies ausführt.