您好 名为G09的软件使用Linda并行工作。它将其并行子进程在其他节点(主机)上生成为
/usr/bin/ssh -x compute-0-127.local -n /usr/local/g09l/g09/linda-exe/l1002.exel ...other_opts...
但是,当主节点终止此进程时,其他节点上的相应子进程(即compute-0-127)不会死,而是继续在后台运行。现在,我手动转到具有这些孤立的Linda进程的每个节点,并使用kill
将其终止。有没有办法杀死这样的子进程?
在杀死进程之前查看用于PSTREE的pastebin 1,在父进程被杀之后查看用于PSTREE的pastebin 2
pastebin1 - http://pastebin.com/yNXFR28V
pastebin2 - http:// pastebin.com/ApwXrueh
- 没有足够的声誉点超链接第二个pastebin,对不起!(
更新到Answer1
谢谢马丁的解释。我试过跟着
killme() { kill 0 ; } ; #Make calls to prepare for running G09 ;
g09 < "$g09inp" > "$g09out" &
trap killme 'TERM'
wait
但是当Torque / Maui(处理作业执行)将作业(此脚本)作为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'
错了吗?
答案 0 :(得分:1)
我会尝试以下方法:
向流程组发送KILL信号非常简单: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
您可以拥有任意数量的子进程(直接或间接);他们都会得到信号 - 只要他们不从过程组中分离出来。
答案 1 :(得分:0)
我使用ssh -N
(类似于ssh -n
)遇到类似的问题,如果我在启动ssh调用的脚本中运行它,kill -9 0
对我不起作用。我发现kill
确实终止了ssh进程,这不是很优雅,但我目前正在使用它。jobs -p