Jaka jest funkcja polecenia nohup?


18

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.


Jeśli jest dostępna w twojej powłoce, disownjest lepszą alternatywą dla nohup. Polecenie w tle za pomocą command &lub Ctrl-Z, a następnie użyj, disownaby odłączyć je od powłoki.
John Kugelman wspiera Monikę

@JohnKugelman, który nie jest wystarczający , zmieniłeś również strumień wejściowy, wyjściowy i strumień błędów. Dlaczego więc nie użyć „nohup”, który robi to automatycznie dla Ciebie?
miracle173

Odpowiedzi:


34

Rozważmy, że otworzyłeś geditedytor tekstów z terminala i pracujesz nad nim. Jeśli zamkniesz terminal przed zamknięciem gedit, gedit również zostanie zamknięty, gdy tylko zamkniesz terminal. Więc co tu się dzieje? geditDział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. nohupwykonuje dokładnie tę pracę.

nohupnie 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 przeszukasz pstree, 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.


16

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.).


1
Nie tylko z powrotem za dnia. Większość moich dużych zadań uruchamiam w klastrze serwerów, do którego ssh. Gdybym nie używał nohup, musiałbym zostawić laptopa podłączonego do tych komputerów przez kilka dni, czekając na zakończenie zadań.
Ray

@Ray, a co z uruchamianiem ich za pośrednictwem „at” lub jako zadań cron?
RonJohn

@RonJohn Sure. Lub za pośrednictwem silnika siatki. Nie chciałem sugerować, że nohup jest jedyną opcją, tylko że nadal jest używane do tego celu.
Ray

1
Może twoje uwagi historyczne są prawidłowe. Ale twoje wnioski na temat jego obecnego znaczenia są błędne. Nie jest to przydatne na powolnych komputerach, ale przydaje się w przypadku długotrwałych zadań. To są dwie różne rzeczy. Używasz „nohup”, aby chronić swoją pracę przed zamierzonym lub niezamierzonym odłączeniem terminala. Nawet w dzisiejszych czasach nie jesteś zadowolony, jeśli zadanie zostanie przerwane, ponieważ błąd sieci rozłącza terminal i zadanie zostaje przerwane.
miracle173

Zadania @Ray Cron są całkowicie nieodpowiednie do osiągnięcia tego celu. Cronjobs są do zadań okresowych, musisz ustawić środowisko w cronjob i wziąć pod uwagę wiele innych rzeczy. Może „at” jest nieco łatwiejsze w obsłudze, ale jednak bardziej złożone niż nohup.
miracle173
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.