杀了所有进程产生了通过父母与ssh-x-n`在其他的主机
-
27-09-2019 - |
题
嗨 一个软件名为g09进行的工作并行使用琳达。它产生其行儿童的进程上的其他节点(主持)为
/usr/bin/ssh -x compute-0-127.local -n /usr/local/g09l/g09/linda-exe/l1002.exel ...other_opts...
然而,当主节点杀了这个过程中,相应的儿童过程中对其他节点,即计算-0-127不会死但一直运行的背景。现在,我手动去每个节点已琳达这些孤立的过程和杀死他们 kill
.是否有任何方式杀死这样的儿童过程?
看看引擎收录1PSTREE之前杀死的过程,并在引擎收录2PSTREE后父母被杀害
pastebin1- http://pastebin.com/yNXFR28V
pastebin2-http://pastebin.com/ApwXrueh
-没有足够的信誉点为超链接第二引擎收录的,对不起!(
更新Answer1
谢谢马丁解释。我试了下
killme() { kill 0 ; } ; #Make calls to prepare for running G09 ;
g09 < "$g09inp" > "$g09out" &
trap killme 'TERM'
wait
但是,当扭矩/茂宜岛(其处理作业的执行)杀死的工作(这个脚本)为 qdel $jobid
该进程开始通过g09进行为 ssh -x $host -n
仍然运行的背景。我做错了这里?(正常的终止不是一个问题,因为g09进行自己停止这些进程。) 以下是 pstree
之前 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
和之后 qdel
它还显示了
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
我做错了这里?是的 trap killme 'TERM'
错了?
解决方案
我会尝试下做法:
- 创建一个脚本/应用程序,包这g09进行二元,你都开始,开始包装而不是
- 在脚本,等待侠信号抵达(这应该是收到时的ssh关闭连接)
- 在处理侠信号,将信号发送到你的进程组(即PID0)就杀死了所有的进程在本组。
发送一个信号进程的组真是容易的: kill -9 0
.试试这个:
#!/bin/sh
./b.sh 1 &
./b.sh 2 &
sleep 10
kill -9 0
其中b。sh
#!/bin/sh
while /bin/true
do
echo $1
sleep 1
done
你可以有很多儿童过程为你想要的(直接或间接地);他们将所有获得的信号-因为只要他们不分离自己的进程的集团。
其他提示
我不得不使用ssh -N
(类似于ssh -n
)类似的问题,如果我运行一个脚本,启动SSH调用内部kill -9 0
不会为我工作。我发现kill
并终止SSH过程,这是不是很优雅,但我使用的是目前。jobs -p