Zastanawiałem się, na przykład, kiedy uruchamiam qtox
z:
qtox &
A następnie zamknij Terminal, qtox
zamyka się nim. Jednak podczas etherape
korzystania z:
sudo etherape &
Zamknięcie terminalu nie zamyka się ani nie powoduje żadnych problemów w Etherape. A wśród różnych aplikacji jest inne zachowanie, niektóre zamykają się, gdy robi to Terminal, inne nie, dlaczego? Dlaczego jedni się zamykają, a inni nie? Używam Ubuntu GNOME 15.10 z GNOME 3.18.
qtox
wychodzić po zamknięciu terminala, zawsze możesz go uruchomićnohup qtox &
.Odpowiedzi:
Kiedy zamykasz terminal, terminal wysyła sygnał SIGHUP do powłoki; powłoka z kolei wysyła sygnał SIGHUP do wszystkich swoich potomnych grup procesów, które obejmują grupy procesów w tle;
To, jak każdy pojedynczy proces zareaguje na sygnał, zależy wyłącznie od procesu: jeśli proces nie zdefiniował procedury obsługi sygnału i nie poinformował jądra (za pomocą jakiegoś syscall, takiego jak
signal()
lubsigaction()
), że chce go obsłużyć, jądro wykonuje domyślna procedura obsługi sygnału, która w przypadku sygnału SIGHUP polega na zakończeniu procesu.Jednak po uruchomieniu polecenia za
sudo
pomocą UIDsudo
procesu i jego procesu potomnego ustawiane jest na0
(root); ogólnie, chyba że identyfikator UID procesu wysyłającego sygnał jest0
(root) lub taki sam jak proces docelowy, jądro odrzuca sygnał (tj .: proces nie może wysyłać sygnałów do procesu należącego do innego użytkownika, chyba że proces wysyłanie sygnału należy do roota; dlatego proces uruchamiany przez użytkownika, taki jak instancja Bash uruchamiana przez terminal, nie może ZATRZYMAĆsudo
procesu, a ostatecznie zamknięcie terminala nie wpływa na proces rozpoczętysudo
.źródło
nohup
tych poleceń, które zamykają SIGHUP :) Upgoatedsudo
.sudo
po prostu uruchamia polecenie jako inny użytkownik i nie można wysłać sygnału do procesów innych użytkowników. Zobaczyćman 2 kill
.sudo
jakiś biedny człowieknohup
?sudo
zesudo
względu nanohup
efekt uboczny, biorąc pod uwagę wszystkie inne wady.nohup
, tworzynohup.out
po nim niepotrzebne pliki. Zamiast tego użyjdisown
wbudowanego polecenia.