Przeczytałem z książki Nowoczesne systemy operacyjne, że po uruchomieniu polecenia powłoka tworzy proces potomny, czeka na niego, aż dziecko zakończy wykonywanie, a następnie czeka na kolejne polecenie od użytkownika. Tak jest w przypadku wielu takich programów gedit
. Terminal nie przyjmuje poleceń, dopóki się nie zamknę gedit
. Jednak gdy otwieram edytor kodu atomu , powłoka natychmiast wraca, gotowa zaakceptować następne polecenie nawet przy uruchomionym edytorze. Zamknięcie terminala nie zamyka atomu. Czy to oznacza, że edytor nie otworzył się jako proces potomny? Jaki jest podstawowy mechanizm, który umożliwia to?
Bieganie ps au | grep atom
daje
<username> 8042 0.0 0.0 15944 2264 pts/1 S+ 00:55 0:00 grep --color=auto atom
shell
process
background-process
Aswin PJ
źródło
źródło
ps au | grep atom
terminal i dodać wynik do swojego pytania?Odpowiedzi:
Pytanie dotyczy dwóch rodzajów programów:
W pierwszym przypadku programy, które wchodzą w interakcję z użytkownikiem w powłoce, są zaprojektowane do działania do końca przed przywróceniem kontroli w powłoce. Nic specjalnego się nie dzieje.
Drugi przypadek jest bardziej skomplikowany. Zazwyczaj program rozwidla się (tworząc kopię siebie w pamięci) i aranżuje usunięcie powiązania z terminalem sterującym powłoki i może uruchomić inny program - który działa niezależnie od oryginalnej powłoki. Możesz zobaczyć wiadomości z drugiego programu, ale zwykle nie wchodzi on w interakcje z tobą. W zależności od tego, jak jest używany, możesz mieć
Dalsza lektura:
źródło
daemon
funkcji bibliotecznej, która robi to wszystko.