Po pierwsze, za każdym razem, gdy wykonujesz polecenie, powłoka rozwidla nowy proces, bez względu na to, czy go uruchomisz, &czy nie. &oznacza tylko, że używasz go w tle.
Uwaga: nie jest to zbyt dokładne. Niektóre polecenia, takie jak cdfunkcje powłoki, zwykle nie rozwidlają nowego procesu. type cmdzwykle powie ci, czy cmdjest to polecenie zewnętrzne, czy funkcja powłoki. type typemówi ci, że typesama jest funkcją powłoki.
nohupto coś innego. Informuje nowy proces o zignorowaniu SIGHUP. Jest to sygnał wysyłany przez jądro, gdy powłoka nadrzędna jest zamknięta.
Aby odpowiedzieć na twoje pytanie, wykonaj następujące czynności:
- uruchom
emacs & (domyślnie powinien działać w osobnym oknie X) .
- w powłoce nadrzędnej uruchom
exit.
Zauważysz, że emacsokno zostało zabite, mimo że działa w tle. Jest to zachowanie domyślne i nohupsłuży ono właśnie do jego modyfikacji.
Uruchamianie zadania w tle (z &lub bg, założę się, że inne powłoki również mają inne składnie) jest funkcją powłoki, wynikającą ze zdolności współczesnych systemów do wielozadaniowości. Zamiast rozwidlone nową instancję powłoki dla każdego programu chcesz uruchomić, nowoczesne muszli ( bash, zsh, ksh, ...) będzie miał możliwość zarządzania listę programów (lub pracy ). Tylko jeden z nich może znajdować się na pierwszym planie , co oznacza, że skupia się na powłoce. Chciałbym, aby ktoś mógł bardziej rozwinąć różnice między procesem działającym na pierwszym planie a drugim w tle (głównym jest dostęp do stdin/ stdout).
W każdym razie nie wpływa to na reakcję procesu potomnego SIGHUP. nohuprobi.
nohuprobi. Którą część pomyliłeś?