tuer tous les processus créés par le parent avec `ssh -X -n` sur d'autres hôtes
-
27-09-2019 - |
Question
Salut Un logiciel nommé G09 fonctionne en parallèle en utilisant Linda. Il engendre ses processus enfants parallèles sur d'autres noeuds (hôtes) comme
/usr/bin/ssh -x compute-0-127.local -n /usr/local/g09l/g09/linda-exe/l1002.exel ...other_opts...
Cependant, lorsque le nœud maître tue ce processus, le processus d'enfant correspondant sur un autre noeud, à savoir calculer-0-127 ne meurt pas, mais continue à courir en arrière-plan. En ce moment, je vais manuellement à chaque noeud qui a ces processus Linda orphelins et les tuer avec kill
. Est-il possible de tuer ces processus enfants?
Regardez pastebin 1 pour pstree avant de tuer le processus et à après parent pastebin 2 pour pstree est tué
pastebin1 - http://pastebin.com/yNXFR28V
pastebin2 - http: // pastebin.com/ApwXrueh
assez -non points de réputation pour hyperlinking deuxième pastebin, désolé! (
Mise à jour du Répondre1
Merci Martin pour expliquer. J'ai essayé suivant
killme() { kill 0 ; } ; #Make calls to prepare for running G09 ;
g09 < "$g09inp" > "$g09out" &
trap killme 'TERM'
wait
mais lorsque le couple / Maui (qui gère l'exécution du travail) tue le travail (ce script) que qdel $jobid
les processus lancés par G09 comme ssh -x $host -n
toujours en arrière-plan. Qu'est-ce que je fais mal ici? (Terminaison normale est pas un problème car G09 s'arrête ces processus.) A la suite est pstree
avant qdel
bash
|-461.norma.iitb. /opt/torque/mom_priv/jobs/461.norma.iitb.ac.in.SC
| `-g09
| `-l1002.exe 1048576000Pd-C-C-addn-H-MO6-fwd-opt.chk
| `-cLindaLauncher/tmp/viaExecDataN6
| |-l1002.exel 1048576000Pd-C-C-addn-H-MO6-fwd-opt.ch
| | |-{l1002.exel}
| | |-{l1002.exel}
| | |-{l1002.exel}
| | |-{l1002.exel}
| | |-{l1002.exel}
| | |-{l1002.exel}
| | |-{l1002.exel}
| | `-{l1002.exel}
| |-ssh -x compute-0-149.local -n ...
| |-ssh -x compute-0-147.local -n ...
| |-ssh -x compute-0-146.local -n ...
| |-{cLindaLauncher}
| `-{cLindaLauncher}
`-pbs_demux
et après qdel
-il encore des spectacles
461.norma.iitb. /opt/torque/mom_priv/jobs/461.norma.iitb.ac.in.SC
`-ssh -x -n compute-0-149 rm\040-rf\040/state/partition1/trirag09/461
l1002.exel 1048576000Pd-C-C-addn-H-MO6-fwd-opt.ch
|-{l1002.exel}
|-{l1002.exel}
|-{l1002.exel}
|-{l1002.exel}
|-{l1002.exel}
|-{l1002.exel}
|-{l1002.exel}
`-{l1002.exel}
ssh -x compute-0-149.local -n /usr/local/g09l/g09/linda-exe/l1002.exel
ssh -x compute-0-147.local -n /usr/local/g09l/g09/linda-exe/l1002.exel
ssh -x compute-0-146.local -n /usr/local/g09l/g09/linda-exe/l1002.exel
Qu'est-ce que je fais mal ici? est le mauvais de trap killme 'TERM'
?
La solution
Je voudrais essayer l'approche suivante:
- créer un script / application qui enveloppe ce binaire G09 que vous commencez, et commencer à wrapper que la place
- dans le script, attendez le signal HUP pour arriver (ce qui devrait être reçu lorsque la connexion ssh est fermé)
- dans le traitement du signal HUP, envoyer un signal à votre groupe de processus (par exemple PID 0) qui tue tous les processus dans le groupe.
L'envoi d'un signal KILL au groupe de processus est très simple: kill -9 0
. Essayez ceci:
#!/bin/sh
./b.sh 1 &
./b.sh 2 &
sleep 10
kill -9 0
où b.sh est
#!/bin/sh
while /bin/true
do
echo $1
sleep 1
done
Vous pouvez avoir autant de processus enfants que vous voulez (directement ou indirectement); ils auront tous le signal -. tant qu'ils ne se détachent pas du groupe de processus
Autres conseils
J'ai eu un problème similaire en utilisant ssh -N
(similaire à ssh -n
), et kill -9 0
ne fonctionne pas pour moi si je le lance dans un script qui initie l'appel ssh. Je trouve que kill
ne se termine le processus ssh, ce qui est très élégant, mais je me sers qu'à l'heure actuelle. jobs -p