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-Zi 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 pstreepokazał, że został „przyjęty” przez init.
Czy to jest oczekiwane zachowanie?
Ale jeśli tak, jaki nohupjest 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
nohupi / lub&; następnie został zawieszonyCTRL-Zi wznowiony w tle zbg. - Sesja ssh nie spadła. Wystąpiło rzeczywiste wylogowanie (
exitpolecenie „ ”). - Proces był
scpoperacją kopiowania plików. - Po ponownym zalogowaniu
pstreepokazał , ż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 nohuppolecenie?
Edytuj 3
Próbowałem ręcznie wysłać SIGHUPdo 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 initi działał dalej, i znalazłem go tam podczas ponownego logowania.
Jestem teraz dość zaskoczony. Wygląda na to, że w ogóle nie SIGHUPwysłano żadnego dodatkowego logowania.
1>/dev/null 2>&1Na bash itp.?