Tuer les process dépendants

Bonjour,
J’ai un script qui démarre d’autres process.
Quand je fais :

# pkill -TERM -P $PIdParent

Tous les process fils se terminent mais le process père redémarre tous les process
Si je kill le process père, je perds ça référence, et les process fils deviennent “père” …
Quelqu’un voit une solution ?

Salut,

[mono]# cat .bashrc[/mono]

[code]function killbill {
BAK=$IFS
IFS=$’\n’
for id in $(ps aux | grep -P -i $1 | grep -v “grep” | awk ‘{printf $2" “; for (i=11; i<NF; i++) printf $i” "; print $NF}’); do
service=$(echo $id | cut -d " " -f 1)
if [[ $2 == “-t” ]]; then
echo $service “$(echo $id | cut -d " " -f 2-)” "would be killed"
else

        echo $service \"$(echo $id | cut -d " " -f 2-)\" "killed"
        kill -9 $service
    fi
done
IFS=$BAK

}[/code]

ÇA, c’est une histoire de PROCESSUS qui jouent aux KILLs.
Pauvre France :unamused:
:laughing: :laughing: :laughing:

le père … le fils… et BelZéButh qui joue le saint-esprit :laughing:

La différence entre le TERM et le KILL c’est que le premier demande au processus de s’arrêter tout seul proprement, le second ne demande l’avis de personne et supprime le process sans prévenir les fils.
Donc si en faisant un TERM le process redémarre les fils c’est qu’il est fait comme ça.
Le Kill est une méthode barbare qui ne doit être utilisé quand dernier recours :075

[quote=“BelZéButh”]Salut,

[mono]# cat .bashrc[/mono]

[code]function killbill {
BAK=$IFS
IFS=$’\n’
for id in $(ps aux | grep -P -i $1 | grep -v “grep” | awk ‘{printf $2" “; for (i=11; i<NF; i++) printf $i” "; print $NF}’); do
service=$(echo $id | cut -d " " -f 1)
if [[ $2 == “-t” ]]; then
echo $service “$(echo $id | cut -d " " -f 2-)” "would be killed"
else

        echo $service \"$(echo $id | cut -d " " -f 2-)\" "killed"
        kill -9 $service
    fi
done
IFS=$BAK

}[/code][/quote]
Dans cette fonction tu ne tues pas le programme à l’origine des autres, ce qui fait que dans la seconde suivante, ils vont tous redémarrer …
Pour le moment je fais :

$ ps -o pid --no-headers --ppid $MonPID source

Pour avoir la liste des process, puis je kill mon PID source et ensuite ligne par ligne je les kill les uns après les autres.
J’ai besoin de ça dans le cas ou mon appli plante, dans ce cas je n’ai pas la possibilité d’arrêter normalement les process, c’est pour ça que je kill et pas juste TERM.

Tu peux aussi mettre ton père dans un cgroup avant le lancement (= mettre le bash qui lance le père qui lance…), tu auras ensuite la liste des fils dans un fichier, même si le père meurt.

C’est une bonne idée, le seul problème : le noyau est trop vieux :frowning: et j’ai pas le droit de le changer …