Killer un process enfant - Divers - Linux et OS Alternatifs
Marsh Posté le 05-02-2010 à 09:51:05
person?
Marsh Posté le 05-02-2010 à 12:50:31
bah j'ai trouvé ça
http://www.askdavetaylor.com/how_d [...] _unix.html
et je me suis aussi amusé à essayer la commande pstree. superbe mais faite pour les utilisateurs, pas pour les scripts
|
Marsh Posté le 05-02-2010 à 13:14:26
merci pour le link
mais le probleme, c'est que je n'ai que deux process, le parent et l'enfant, et lorsque je kill le process parent, il me reste l'enfant sur les bras...
Citation : nagios 25242 1 0 09:05 ? 00:00:00 /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg |
Je kill le 25242, il me reste le 25247 malgre tout...
Alors bon, deja je ne souhaite pas d'enfants (voir topac sur discu), alors si on m'en file quand meme au boulot dont je ne peux pas me debarrasser, ca va pas le faire
Marsh Posté le 12-02-2010 à 13:00:54
boum
toujours pas de soluce?
Marsh Posté le 15-02-2010 à 19:21:55
decidement, pas de soluce??
Marsh Posté le 15-02-2010 à 19:26:16
Salut
J'ai trouvé ça rapidement :
http://www.linuxquestions.org/ques [...] -c-247798/
kill -9 `pidof -x java`
>> l'option -x permettrait d'obtenir les pid des processus enfants.
Mais au final, ça va dépendre fortement de comment a été créé le process et s'il a été détacher du papa, je pense
edit: hmmm, en fait d'après le manpage... ça n'a pas l'air d'être ça
Marsh Posté le 15-02-2010 à 19:45:38
si pidof te renvoie tous les pid, un kill -9 `pidof process` devrait fonctionner.
cela dit, t'as pas moins brutal qu'un -9 ?
Marsh Posté le 15-02-2010 à 19:58:50
le manpage de pidof n'indique pas qu'il retourne les pid des enfants de process.
Marsh Posté le 16-02-2010 à 00:09:20
Et pourquoi dans ton script tu fait pas une recherche du type.
ps axf | grep -v grep | grep nagios | awk '{print $1}'
Qui va te retourner les pids et après plus qu'a faire un kill dessus.
Marsh Posté le 16-02-2010 à 09:55:01
le truc c'est que je vois bien les pids, mais normalement, en tuant le process pere, je pensais arreter egalement le process enfant...
Marsh Posté le 16-02-2010 à 09:58:37
Tout dépend comment le process fils a été construit. Il peut rompre ses liens de parenté et être indépendant du processus père.
Par exemple, pour un process lancé depuis un shell, pour continuer à exister après la fermeture du shell, il y nohup
Marsh Posté le 16-02-2010 à 10:25:04
Mmmmh... Honnetement, j'en sais trop rien. C'est le process ndo2db-3x que je lance lorsque je redemarre Nagios. Il cree deux process par la suite. Lorsque je change quelque chose dans la config de Nagios, je dois arreter ndo2db-3x et le relancer avant de relancer ou reloader la conf de Nagios.
Embetant en fait
Marsh Posté le 16-02-2010 à 10:30:05
Hello,
et /etc/init.d/nagios stop ou /etc/rc.d/init.d/nagios stop
suivant la distrib.
Marsh Posté le 16-02-2010 à 10:35:11
oui mais cela ne me lance/relance pas ndo2db-3x, justement. Ou il va falloir que je l'inclue dedans, et donc lister les process, recuperer, killer, relancer... Pour ca que je pensais qu'en tuant le pere, je tuais egalement l'enfant.
Marsh Posté le 16-02-2010 à 10:39:32
sinon je connais pas nagios, mais apparement lu ici
Code :
|
Marsh Posté le 16-02-2010 à 11:47:00
d'ou mon besoin de pouvoir tuer tous les process de ndo dans soit le init.d/ndo2db-3x ou dans le init.d/nagios
Marsh Posté le 16-02-2010 à 18:31:17
LeKeiser a écrit : le truc c'est que je vois bien les pids, mais normalement, en tuant le process pere, je pensais arreter egalement le process enfant... |
je ne comprends pas bien ce qui t'empêche de tuer tous les process à la fois ?
Marsh Posté le 16-02-2010 à 19:10:47
LeKeiser a écrit : le truc c'est que je vois bien les pids, mais normalement, en tuant le process pere, je pensais arreter egalement le process enfant... |
Oui d'accord mais avec la recherche de tous les pids des processus plus de problème.
tu rajoute juste une boucle for et le tour est joué.
Marsh Posté le 16-02-2010 à 19:15:50
franck1135 a écrit : |
c'est même pas nécessaire, kill accepte plusieurs pid
Marsh Posté le 17-02-2010 à 09:30:42
kill accepte plusieurs pids a la fois?
la je tente avec des sed des awks (la ligne qu'on m'a donne plus haut), pour killer le process avant de le relancer, mais... ca fait longtemps et je suis sur 20 trucs en meme temps
Marsh Posté le 17-02-2010 à 09:37:56
Moi je ferais comme ca :
for i in $(ps axf | grep -v grep | grep nagios | awk '{print $1}') ; do kill -9 $i ; done
Marsh Posté le 17-02-2010 à 09:53:07
franck1135 a écrit : Moi je ferais comme ca : |
je pense que ca marche
par contre, tu peux m'expliquer cette tournure? le grep -v grep |grep ca me perturbe
Marsh Posté le 17-02-2010 à 10:04:41
Le grep -v c'est juste pour pas que dans le ps axf il me trouve le pid de mon grep en cours.
Marsh Posté le 17-02-2010 à 11:42:41
Je pense que ce qui le gène c'est qu'on fasse un grep après le "grep -v grep".
Même si ça change rien pour la lisibilité mettre le "grep -v grep" à la fin prête moins à confusion.
Citation : for i in $(ps axf | grep ndo2db-3x |grep -v grep | awk '{print $1}') ; do echo $i ; done |
Ca fait la même chose et c'est plus compréhensible pour quelqu'un qui maitrise pas le shell sur le bout de doigts
Marsh Posté le 17-02-2010 à 19:13:33
non mais pidof fait exactement ça hein
Marsh Posté le 18-02-2010 à 00:54:01
pidof, chez moi, ne me donne pas le pid de postfix
Marsh Posté le 18-02-2010 à 10:19:13
LeKeiser a écrit : pidof, chez moi, ne me donne pas le pid de postfix |
[jules@tue-amour ~]$ ps axf |
[jules@tue-amour ~]$ pidof master |
Marsh Posté le 18-02-2010 à 12:13:39
A oui je ne servais jamais de pidof donc bien plus simple a faire dans un script.
#!/bin/sh
pid_nagios=$(pidof nagios)
kill -9 $pid_nagios
Marsh Posté le 18-02-2010 à 16:02:49
oui, mais il faut toujours utiliser awk lorsqu'on a plusieurs pid, non? Enfin, plus simple, non?
Marsh Posté le 18-02-2010 à 17:04:32
Non pidof renvoie bien tous les pids donc aucun problème.
Marsh Posté le 18-02-2010 à 20:12:01
kill -9 c'est violent ... a priori surement normal que l'enfant te reste sur les bras
commence par un kill tout court (sous entendu -15) pour envoyer le signal SIGTERM et non SIGKILL au père, lui demander de terminer proprement (et s'il est bien codé de tuer ses enfants)
Si avec un kill tout court le père meurt mais pas les enfants, c'est que ton prog est mal codé, dans ce cas, pas le choix, kill -9 <pids des enfants>
Marsh Posté le 19-02-2010 à 15:22:51
le process est ndo2db-3x
aucun soucis pour killer Nagios via un /init.d/nagios stop (ou restart)
Marsh Posté le 03-02-2010 à 18:40:11
Bonjour a tout le monde,
Voila, j'ai un petit probleme sous Nagios, precisement avec ndo2db-3x. Lorsque ce dernier est lance, apres quelques minutes, j'ai deux process qui sont lances. Lorsque je fais un kill -9 du process parent, il me reste toujours le process enfant, que je suis oblige de killer de la meme facon.
Auriez vous une idee pour m'en debarrasser en meme temps que le process pere?
Ce qu'il se passe, c'est que je dois refaire le script de demarrage/redemarrage de ndo2db-3x, et je veux m'assurer en premier qu'il ne tourne pas ou alors trouver son PID et le killer. Facile, sauf que le process enfant est donc cree quelques temps/minutes apres le process pere, et qu'il ne veut pas le suivre lorsque je detruis son createur...
Merci de votre aide
---------------
"I intend to live the first half of my life.I don't care about the rest."Errol Flynn."The difference between genius and stupidity is that genius has its limits."Albert Einstein