/ / shell - Proces odłączony przez uruchomienie w tle i przekierowanie STDIN / OUT? - bash, shell, ssh, root, detach

shell - Proces odłączony przez działanie w tle i przekierowanie STDIN / OUT? - bash, shell, ssh, root, odłącz

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 № 1

Jeś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 &