Samo umieszczenie go w tle nie spowoduje pozostania w tle po zakończeniu sesji ssh.
Tło to po prostu odłącza stdin
potok 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ą SIGHUP
sygnał. 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 screen
jest jednym z takich poleceń; nohup
jest inny. screen
jest ogólnie bardziej elastyczny i bardzo przydatny do tego konkretnego zadania. bg
nie jest odpowiednie, ponieważ proces potomny „honoruje” SIGHUP, jeśli nie jest zawinięty w proces, który ma na celu ignorowanie SIGHUP, np screen
. nohup
jest 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 .
disown