Portál AbcLinuxu, 7. května 2025 07:28

Dotaz: jak zabít proces včetně všech potomků

Ondroid avatar 2.6.2005 14:45 Ondroid | skóre: 32 | blog: Hombre
jak zabít proces včetně všech potomků
Přečteno: 671×
Odpovědět | Admin
DD

Jak spolehlivě kilnout proces včetně všech jeho potomků ? Tedy tak aby nehrozilo, že něktarý z potomků si vybere za rodiče init a poběží dál. Znám pouze pid toho jediného původního procesu, mám to udělat tak, že pomocí pgrep -P pid budu vyzobávat ty potomky ze všech vláken nebo to jde nějak snadněji ?

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.6.2005 15:21 Drašar | skóre: 27 | Velký Týnec
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pomoci ps --ppid PID si vypises vsechny jeho potomky a pak uz to staci rekurzivne projet a postrilet.
Patička
2.6.2005 17:57 dworkin
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
a nebo pstree -hlp a zabit ten co je parent
2.6.2005 21:23 Hovadko
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
Odpovědět | | Sbalit | Link | Blokovat | Admin
A nepomohlo by treba

killall jmeno_procesu

?
Ondroid avatar 2.6.2005 23:39 Ondroid | skóre: 32 | blog: Hombre
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
To by mohlo pokosit i procesy kterých se to vůbec netýká...
2.6.2005 21:48 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Napadá mě
pkill -P $pid
kill $pid
2.6.2005 22:00 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
+ rekurse.

Moje oblíbená otázka: jak to udělat bez race condition (potomci se mohou během neatomického zabíjení množit, sami ukončovat a jejich pidy mohou dostávat nové procesy)? V tomto případě nevím. Věci jako killpg fungují jen na některé případy, možná by pomohly nějaké triky s ptrace + PTRACE_ATTACH, ale jednoduché řešení nevidím.
Ondroid avatar 2.6.2005 23:36 Ondroid | skóre: 32 | blog: Hombre
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
Přesně tak, je to složitější než to na první pohled vypadá. Zvláště pokud se potomci začnou hemžit v průběhu jejich zabíjení :o) Jak to tak vidím asi nakonec vystačím s tou rekuzí a pgrep / pkill a bude to... i když asi ne úplně dokonalé.
3.6.2005 08:04 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
Myslím, že to má celkem jednoduché řešení. kill -HUP $pid a procesy které nepostřílí své potomky sami sudo rm -f $(readlink -f /proc/$pid/exe) Co se budem mazat se špatně napsanýma aplikacema. Kdo má náladu, může to opravit sám přímo ve zdrojáku, protože tam je jediné místo, kde uvedený problém řešit.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
3.6.2005 09:24 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
Všichni démoni, kteří se na SIGHUP restartují, jsou špatně napsané aplikace?
3.6.2005 16:04 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
Nojo. Ti by to měli udělat na SIGTERM.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
3.6.2005 09:53 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: jak zabít proces včetně všech potomků
while (1) fork();
je vyloženě špatně napsaná aplikace, s tou bych se vůbec nemazal ;-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.