Jestem nowicjuszem w Ubuntu. Nauczyłem się polecenia
nohup [command]
- uruchomić <command>
odporny na sygnał rozłączenia
Nie rozumiem znaczenia „ odporności na sygnał rozłączenia ”. O jakim rodzaju sygnału mówi? I powiedz mi, jak używać tego polecenia na przykładzie.
command-line
nohup
coding_ninza
źródło
źródło
disown
jest lepszą alternatywą dlanohup
. Polecenie w tle za pomocącommand &
lubCtrl-Z
, a następnie użyj,disown
aby odłączyć je od powłoki.Odpowiedzi:
Rozważmy, że otworzyłeś
gedit
edytor tekstów z terminala i pracujesz nad nim. Jeśli zamkniesz terminal przed zamknięciemgedit
, gedit również zostanie zamknięty, gdy tylko zamkniesz terminal. Więc co tu się dzieje?gedit
Działa jako proces potomny pod terminalem. Po zamknięciu terminala do procesu wysyłany jest sygnał rozłączenia (SIGHUP
), który kończy proces potomny.Z drugiej strony, jeśli chcesz, aby proces potomny (tutaj
gedit
) działał nawet po zamknięciu terminala nadrzędnego, chciałbyś, aby proces był odporny na sygnał rozłączenia. Aby zamknięcie terminalu nie zamknęło procesu potomnego.nohup
wykonuje dokładnie tę pracę.nohup
nie odłącza polecenia od terminala , powoduje, że skrypt ignoruje SIGHUP, i przekierowuje stdout / stderr do pliku nohup.out, dzięki czemu polecenie może kontynuować działanie w tle po wylogowaniu. Jeśli zamkniesz powłokę / terminal lub wylogujesz się, twoje polecenie nie będzie już potomkiem tej powłoki. Należy do procesu init. Jeśli przeszukaszpstree
, zobaczysz, że jest teraz własnością procesu 1 (init). Tego nie można przywrócić na pierwszy plan, ponieważ pierwszy plan już nie istnieje.źródło
Poza tym, co napisał @sourvac, jest to spuścizna po Back In The Day, kiedy ludzie logowali się za pomocą głupich terminali tekstowych, często za pośrednictwem modemu (oryginalny, analogowy 110 bodów): „rozłączenie” to dosłownie „odłożenie słuchawki” „.
Pid odporny na sygnał rozłączenia będzie działał nawet po wylogowaniu i rozłączeniu telefonu . Było to bardzo przydatne na powolnych komputerach, gdy zadania działały godzinami, a ty nie mogłeś się po prostu zalogować (ktoś inny musiał korzystać z terminala, musiałeś korzystać z telefonu, statyczny na linii może „zakłócić” połączenie itp.).
źródło