Killer un process enfant

Killer un process enfant - Divers - Linux et OS Alternatifs

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
Reply

Marsh Posté le 03-02-2010 à 18:40:11   

Reply

Marsh Posté le 05-02-2010 à 09:51:05    

person?


---------------
"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
Reply

Marsh Posté le 05-02-2010 à 12:50:31    

bah j'ai trouvé ça :o
 
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 :D
 


$ pstree -u
init─┬─3*[VBoxClient(ul)───{VBoxClient}]
     ├─VBoxService───{VBoxService}
     ├─atd(daemon)
     ├─console-kit-dae───63*[{console-kit-dae}]
     ├─cron
     ├─dbus-daemon(messagebus)
     ├─dbus-daemon(ul)
     ├─dbus-launch(ul)
     ├─dd
     ├─dhclient3
     ├─gam_server(ul)
     ├─gconfd-2(ul)
     ├─5*[getty]
     ├─gpm
     ├─hald(haldaemon)───hald-runner(root)─┬─hald-addon-acpi(haldaemon)
     │                                     ├─hald-addon-inpu
     │                                     └─2*[hald-addon-stor]
     ├─login───bash(ul)───startx───xinit─┬─Xorg(root)
     │                                   └─lxsession─┬─lxde-settings-d
     │                                               ├─lxpanel
     │                                               ├─openbox
     │                                               └─pcmanfm
     ├─menu-cached(ul)
     ├─notification-da(ul)
     ├─rsyslogd(syslog)───2*[{rsyslogd}]
     ├─sshd
     ├─udevd───2*[udevd]
     ├─upstart-udev-br
     └─xfce4-terminal(ul)─┬─bash───pstree
                          ├─bash
                          └─gnome-pty-helpe

Reply

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
nagios   25247 25242  0 09:05 ?        00:01:47 /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 :O
 


---------------
"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
Reply

Marsh Posté le 12-02-2010 à 13:00:54    

boum
 
toujours pas de soluce?


---------------
"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
Reply

Marsh Posté le 15-02-2010 à 19:21:55    

decidement, pas de soluce??


---------------
"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
Reply

Marsh Posté le 15-02-2010 à 19:26:16    

Salut :o
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 :D


Message édité par o'gure le 15-02-2010 à 19:30:40

---------------
Relax. Take a deep breath !
Reply

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 ?


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

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.


---------------
Relax. Take a deep breath !
Reply

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.

Reply

Marsh Posté le 16-02-2010 à 00:09:20   

Reply

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...


---------------
"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
Reply

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


---------------
Relax. Take a deep breath !
Reply

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 :(


---------------
"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
Reply

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.

Reply

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.


---------------
"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
Reply

Marsh Posté le 16-02-2010 à 10:39:32    

sinon je connais pas nagios, mais apparement lu ici

Code :
  1. Il faut exporter les fichiers et redémarrer Nagios. On modifie également le fichier /etc/init.d/nagios pour inclure le lancement de ndo2db au démarrage de nagios


tuto nagios
 

Reply

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


---------------
"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
Reply

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 ?


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

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é.

Message cité 1 fois
Message édité par franck1135 le 16-02-2010 à 19:11:09
Reply

Marsh Posté le 16-02-2010 à 19:15:50    

franck1135 a écrit :


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é.


 
c'est même pas nécessaire, kill accepte plusieurs pid


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 16-02-2010 à 21:11:24    

a oui c'est vrai donc encore plus simple que prévu.

Reply

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


---------------
"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
Reply

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

Reply

Marsh Posté le 17-02-2010 à 09:53:07    

franck1135 a écrit :

Moi je ferais comme ca :
 
for i in $(ps axf | grep -v grep | grep ndo2db-3x| awk '{print $1}') ; do  echo $i ; done


je pense que ca marche :)
 
par contre, tu peux m'expliquer cette tournure? le grep -v grep |grep ca me perturbe  [:w3c compliant]


---------------
"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
Reply

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.

Reply

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 ;)


---------------
Il y a trois sortes de mensonges : les mensonges, les gros mensonges et les statistiques !
Reply

Marsh Posté le 17-02-2010 à 19:13:33    

non mais pidof fait exactement ça hein [:mlc]


Message édité par Mjules le 17-02-2010 à 19:13:46

---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 18-02-2010 à 00:54:01    

pidof, chez moi, ne me donne pas le pid de postfix  [:w3c compliant]


---------------
"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
Reply

Marsh Posté le 18-02-2010 à 10:19:13    

LeKeiser a écrit :

pidof, chez moi, ne me donne pas le pid de postfix  [:w3c compliant]


 

[jules@tue-amour ~]$ ps axf
(...)
 5116 ?        Ss     0:00 /usr/lib64/postfix/master
 5118 ?        S      0:00  \_ pickup -l -t fifo -u -c -o content_filter  -o rec
 5120 ?        S      0:00  \_ qmgr -l -t fifo -u -c


[jules@tue-amour ~]$ pidof master
5116


 
:spamafote:


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

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

Reply

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?


---------------
"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
Reply

Marsh Posté le 18-02-2010 à 17:04:32    

Non pidof renvoie bien tous les pids donc aucun problème.

Reply

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>

Reply

Marsh Posté le 18-02-2010 à 20:12:45    

et un killall -9 nagios

Reply

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)


---------------
"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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed