W sesji ssh na serwerze uruchomiłem kilka procesów bash (które uruchamiają inne procesy) w tle za pomocą &
i przekierował ich stdin / stdout do pliku (<dev/null >mylog.out
).
Procesy nie są wymienione na liście jobs
i ps -T
pokazuje tylko jeden bash
proces i ps
samo.
Większość procesów (potomnych) jest uruchamianych przez użytkownika root
ale wszystkie są powiązane z konkretnym TTY pts/20
.
Jeśli zamknę sesję ssh, czy procesy i ich dzieci zostaną wysłane w postaci sygnału HUP, czy będą nadal działać? Jeśli tak, jak mogę je całkowicie odłączyć?
Odpowiedzi:
1 dla odpowiedzi № 1Jeśli umieścisz proces w tle, proces zignoruje polecenie SIGHUP. Tak więc proces będzie kontynuowany.
Wyniki testów:
Zaloguj się i uruchom bash
scenariusz o.sh
w tle i wyjdź:
system:10.11.2.122 > o.sh &
system:10.11.2.122 > exit
Zaloguj się ponownie do systemu i sprawdź o.sh
proces:
system:10.11.2.122 > ps -ef | grep o.sh
root 19115 1 0 10:10 ? 00:00:00 /usr/local/bin/bash /root/scripts/o.sh
root 27774 20197 0 10:23 pts/2 00:00:00 grep o.sh
Ta metoda demonstruje uruchomiony proces.
Z bash
, to zachowanie zależy od huponexit
opcja powłoki. Te i inne ustawienia opcji można zobaczyć za pomocą shopt
polecenie na CentOS / RedHat 6.7.
huponexit
domyślnie jest wyłączony w CentOS / RedHat 6.7.
Podzbiór danych wyjściowych shopt
:
histappend off
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell on
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
Aby odpowiedzieć na twoje pytania:
Jeśli zamknę sesję ssh, czy procesy i ich dzieci zostaną wysłane w postaci sygnału HUP, czy będą nadal działać?
To zależy od twojego huponexit
oprawa. Jeśli huponexit
jest off
, następnie Nie i proces będzie kontynuowany. Inaczej, tak.
Jeśli tak, jak mogę je całkowicie odłączyć?
Użyj nohup
polecenie podczas wykonywania procesu.
nohup your_process &