Pytając o to po długiej dyskusji ze współpracownikiem, naprawdę chciałbym tu wyjaśnić.
Uruchamiam proces w tle, dodając „ &
” do wiersza poleceń lub zatrzymując go CTRL-Z
i wznawiając go w tle za pomocą „ bg
”. Następnie wylogowuję się.
Co się dzieje?
Byliśmy całkiem pewni, że to powinien był zostać zabity przez SIGHUP, ale tak się nie stało; po ponownym zalogowaniu proces przebiegał pomyślnie i pstree
pokazał, że został „przyjęty” przez init
.
Czy to jest oczekiwane zachowanie?
Ale jeśli tak, jaki nohup
jest cel polecenia? Wygląda na to, że proces i tak nie zostanie zabity, z nim lub bez niego ...
Edytuj 1
Kilka dodatkowych szczegółów:
- Polecenie zostało uruchomione z sesji SSH, a nie z fizycznej konsoli.
- Komenda została uruchomiona bez
nohup
i / lub&
; następnie został zawieszonyCTRL-Z
i wznowiony w tle zbg
. - Sesja ssh nie spadła. Wystąpiło rzeczywiste wylogowanie (
exit
polecenie „ ”). - Proces był
scp
operacją kopiowania plików. - Po ponownym zalogowaniu
pstree
pokazał , że proces działa i że jest dzieckieminit
.
Edytuj 2
Uściślenie pytania: czy umieszczenie procesu w tle (za pomocą &
lub bg
) spowoduje, że będzie on ignorowany SIGHUP
, tak jak nohup
polecenie?
Edytuj 3
Próbowałem ręcznie wysłać SIGHUP
do scp
: wyszedł, więc zdecydowanie nie ignoruje sygnału.
Następnie spróbowałem ponownie uruchomić go, umieszczając go w tle i wylogowując się: został „adoptowany” przez init
i działał dalej, i znalazłem go tam podczas ponownego logowania.
Jestem teraz dość zaskoczony. Wygląda na to, że w ogóle nie SIGHUP
wysłano żadnego dodatkowego logowania.
1>/dev/null 2>&1
Na bash itp.?