Jak mogę zabić tylko proces nadrzędny?


10

Mam następujące procesy.

ParentProcess
- ChildProcess
- ChildProcess
- ChildProcess

Jak mogę zabić tylko proces nadrzędny? Chcę, aby procesy dzieci nie zostały zabite. Jeśli spróbuję zabić proces rodzica, dzieci dostaną SIGHUP i zostaną zabite.


5
Czy definicja procesu potomnego jest powiązana z jego rodzicem?
Brad Patton,

hm, prawdopodobnie tak. Jest związany z rodzicem.
kcm1700,

Odpowiedzi:


8

Ogólnie rzecz biorąc, kiedy proces staje się osierocony (tzn. Umiera jego rodzic), jest on przyjmowany przez init.

Opisana szczególna sytuacja prawdopodobnie dotyczy procesu interaktywnego, gdy jego kontrolujący terminal zostanie zamknięty (z Wikipedii ):

Sygnał SIGHUP jest wysyłany do procesu, gdy jego terminal sterujący jest zamknięty. Pierwotnie został zaprojektowany, aby powiadomić proces upuszczenia linii szeregowej. W nowoczesnych systemach sygnał ten zwykle oznacza, że ​​sterowanie pseudo lub wirtualnym terminalem zostało zamknięte.

Aby temu zapobiec, procesy potomne powinny blokować SIGHUP, więc w większości przypadków potrzebujesz współpracy z procesem nadrzędnym.

Jeśli proces nadrzędny jest powłoką ( bash, cshi tym podobne) i chcesz poleceń uruchamianych nie do wypowiedzenia, gdy kończy bash, można poprzedzić dowolne polecenie z nohup(od info coreutils "nohup invocation"):

„nohup” uruchamia podaną POLECENIE z ignorowanymi sygnałami rozłączenia, dzięki czemu komenda może kontynuować działanie w tle po wylogowaniu.

W tym przykładzie:

$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;

findnie zostanie zabity, gdy powłoka zakończy działanie i zamknie terminal kontrolny /dev/ttys000.

Jeśli skrypt powłoki powinien blokować SIGHUP, użyj wbudowanego trap, jak wyjaśniono tutaj dla bash.


1
Już otworzyłem proces bez żadnych sugestii?
kcm1700

O ile wiem, niewiele możesz zrobić. Po uruchomieniu procesów nie można zmienić sposobu, w jaki reagują na sygnały.
jaume

1
Jak ustawić działający już proces pod nohup? stackoverflow.com/questions/625409/…
PeterVermont
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.