Kiedy powinienem używać „nohup”, a kiedy powinienem używać „&”?

16

Nigdy nie wiem, kiedy jest najlepszy czas na użycie nohup i & na końcu polecenia.

Alex
źródło

Odpowiedzi:

20

Nohup sprawia, że ​​program ignoruje sygnał HUP, pozwalając mu działać po zamknięciu bieżącego terminala / wylogowaniu użytkownika. Nohup nie wysyła programu do tła.
& na końcu polecenia jest związany z kontrolą zadań powłoki, umożliwiając użytkownikowi kontynuowanie pracy w bieżącej sesji powłoki.
Zwykle nohup i & są łączone w celu uruchomienia programu, który działa po wylogowaniu użytkownika i pozwala kontynuować pracę przy bieżącej sesji powłoki.

Kristaps
źródło
13

Zazwyczaj używam, &gdy chcę uruchomić w tle, polecenie, które nie zajmie długo, lub polecenie, w którym nie będę się przejmować, czy program zostanie zakończony, jeśli nieoczekiwanie wyloguję się z sesji.

xcalc &
rdesktop 1.2.3.4 & 
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &

Pracując przez VPN lub nieokreślone zdalne połączenie, zwykle używam nohupdo uruchamiania wszystkiego, co zajmie trochę czasu. Na przykład podczas uruchamiania importu dużych danych na zdalnym hoście, możesz chcieć użyć tego, nohupaby mieć pewność, że rozłączenie nie spowoduje, że zaczniesz od nowa po ponownym połączeniu.

nohup ./do_data_load.py mydatafile.txt &

Jest również używany, gdy programista nie demonizuje prawidłowo usługi, więc musisz nohupsię upewnić, że nie zostanie zabita po wylogowaniu.

nohup sillyd &

Jeśli zapomnisz użyć nohuppodczas uruchamiania czegoś takiego jak dwa ostatnie przykłady, możesz użyć wbudowanego bash lub zsh, disownaby uzyskać ten sam efekt.

$ sillyd &
[1] 12345            # Whoops!
$ disown %1

Jest to dość rzadki w użyciu nohupbez &, ponieważ tak naprawdę nie można ponownie podłączyć do sesji nohup'd jeśli jesteś wylogowany. To praktycznie eliminuje jego przydatność do interaktywnych poleceń. W przypadku, gdy masz interaktywne polecenie, które chcesz utrwalić podczas sesji lub uniknąć skomplikowanych rozłączeń, możesz użyć screen. Siła ognia w pełni uzbrojonej i operacyjnej screensesji wykracza poza zakres tego postu, więc powinieneś sprawdzić ją bardziej szczegółowo .

Cakemox
źródło
Uważam, że tmux jest łatwiejszy do skonfigurowania i używania niż ekran. Także licencja BSD.
Kristaps
1
Możesz także użyć, byobuktóra dodaje kilka fajnych funkcji do ekranu. Jest dostępny w większości apt i repozytoriach EPEL dla Red Hat.
James
0

nohup: wyloguj bieżącego użytkownika, proces się nie zatrzyma

&: z tym symbolem nie będzie wyjścia w bieżącym terminalu, proces działa w tle

anonimowy
źródło
4
nadal mamy dane wyjściowe, ponieważ & nie usuwa standardowych strumieni wyjściowych i strumieni błędów. musisz użyć przekierowania strumienia, takiego jak to polecenie (w bash)> / dev / null 2> 1
Kristaps