Czy zadanie umieszczone w tle będzie kontynuowane po zamknięciu sesji SSH?
7
Mam instancję AWS i tam mam kilka zadań, które muszę wykonać, co zajmie trochę czasu.
Jeśli uruchomię je przed dojazdem do / z pracy (np. wget <someStuff>), A następnie przekażę je do tła CtrlZ», bgaby sprawdzić, czy zaczyna się poprawnie), a następnie zakończ moją sesję SSH, czy polecenie wget będzie działać w tle?
Samo umieszczenie go w tle nie spowoduje pozostania w tle po zakończeniu sesji ssh.
Tło to po prostu odłącza stdinpotok od konsoli. Proces ten jest nadal potomkiem procesu powłoki, np bash. Standardowa procedura w systemie Linux / UNIX polega na tym, że zakończenie procesu powłoki rodzicielskiej z wdziękiem powoduje, że wszystkie procesy potomne otrzymują SIGHUPsygnał. Prawie wszystkie standardowe procesy przetworzą ten sygnał jako żądanie zakończenia procesu, chociaż proces może zignorować sygnał SIGHUP i kontynuować działanie. Może również zrobić coś zupełnie innego, na przykład włączyć kuchenkę mikrofalową lub zrobić łazik na Księżycu, wiercić w ziemi, uruchomić samochód lub usunąć wszystkie pliki z systemu. To sygnał, co oznacza, że jest to tylko rodzaj polecenia doradczego wysłanego do procesu. Dzięki temu proces może zrobić, co chce.
Oto, co musisz zrozumieć: ponieważ przetwarzanie SIGHUP jest równoznaczne z powiedzeniem „zakończ program teraz”, coś może z łatwością zignorować to „miłe żądanie” i kontynuować. Istnieje więc kilka dedykowanych programów, które zostały zaprojektowane specjalnie w celu umożliwienia kontynuowania procesu nawet po zakończeniu powłoki. Kiedy połączenie SSH rozłącza, nawiasem mówiąc, proces skorupa ma zakończyć jako część sekwencji wylogowania.
GNU screenjest jednym z takich poleceń; nohupjest inny. screenjest ogólnie bardziej elastyczny i bardzo przydatny do tego konkretnego zadania. bgnie jest odpowiednie, ponieważ proces potomny „honoruje” SIGHUP, jeśli nie jest zawinięty w proces, który ma na celu ignorowanie SIGHUP, np screen. nohupjest najbardziej podstawowym procesem ignorującym SIGHUP, ponieważ jest to w zasadzie jego jedyna funkcjonalność, inna niż zapisywanie wyniku procesu potomnego w pliku.
Zobacz także to pytanie, które jest w zasadzie dokładnym duplikatem, ale dotyczy ServerFault .
Wget w szczególności będzie automatycznie kontynuował działanie w tle, jeśli zamkniesz sesję SSH, bez potrzeby wykonywania dalszych działań. Tworzy nawet wget-logplik, jakbyś zaczął go od -bprzełącznika.
Zasadniczo programy, które są zatrzymane lub działają w tle, zamykają się po zamknięciu sesji SSH.
disown
Wget w szczególności będzie automatycznie kontynuował działanie w tle, jeśli zamkniesz sesję SSH, bez potrzeby wykonywania dalszych działań. Tworzy nawet
wget-log
plik, jakbyś zaczął go od-b
przełącznika.Zasadniczo programy, które są zatrzymane lub działają w tle, zamykają się po zamknięciu sesji SSH.
źródło
wget
ignorujeSIGHUP
.