嗨 一个软件名为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 jobs -p并终止SSH过程,这是不是很优雅,但我使用的是目前。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top