Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: kei.101 25. 07. 2013, 13:49:25
-
Ahoj.
Mám skript, který spouští jiné procesy na pozadí. Při ukončení původního skriptu bych potřeboval, aby se ukončil celý podstrom procesů, které daný skript spustil.
Používám ve skriptu toto:
trap 'pkill -P $$' INT TERM
Zajímavé ale je, že to někdy funguje a někdy zase ne (spouštím pořád stejné programy!)
Nevíte někdo, jak to udělat spolehlivě?
Díky.
-
Tipuju ze proto, ze odchytavas trap-em jenom SIGINT a SIGTERM, a pravdepodobne nastava nejaka udalost, kterou podchycenou nemas (treba skript skonci normalne exit-em).
-
Toto je moje verze spolehliveho killovatka:
mypgrep () {
[ ${#1} -le 1 ] && return
for pid in `pgrep -P "${1}"`;
do
mypgrep ${pid}
done
echo ${1}
}
mykill () {
for pid in `mypgrep ${1}`;
do
kill -KILL ${pid}
done
}
mykill $$
Zkuste, treba vam to pomuze.
-
S tímhle jsem se taky trápil a na řešení moc nepřišel. Jediné, co jsem někde vygooglil bylo použít
kill -TERM -<control group>
kde <control group> je shodné s PID rodičovského procesu. Ale některé verze killu mi záporné číslo procesu úplně odmítají.