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 cd
funkcje powłoki, zwykle nie rozwidlają nowego procesu. type cmd
zwykle powie ci, czy cmd
jest to polecenie zewnętrzne, czy funkcja powłoki. type type
mówi ci, że type
sama jest funkcją powłoki.
nohup
to 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 emacs
okno zostało zabite, mimo że działa w tle. Jest to zachowanie domyślne i nohup
sł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
. nohup
robi.
nohup
robi. Którą część pomyliłeś?