убить все процессы, созданные родителем с помощью `ssh -x -n` на других хостах - PullRequest
2 голосов
/ 30 октября 2010

Привет Программное обеспечение с именем G09 работает параллельно, используя Линду.Он порождает свои параллельные дочерние процессы на других узлах (хостах) как

/usr/bin/ssh -x compute-0-127.local -n /usr/local/g09l/g09/linda-exe/l1002.exel ...other_opts...

Однако, когда главный узел убивает этот процесс, соответствующий дочерний процесс на другом узле, а именно compute-0-127 не умирает, но продолжает работать в фоновом режиме.Прямо сейчас я вручную иду к каждому узлу, на котором есть эти осиротевшие процессы Линды, и убиваю их с помощью kill.Есть ли способ убить такие дочерние процессы?

Посмотрите на pastebin 1 для PSTREE перед уничтожением процесса и на pastebin 2 для PSTREE после того, как родительский объект убит
pastebin1 - http://pastebin.com/yNXFR28V
pastebin2 - http: // pastebin.com/ApwXrueh
- не хватает очков репутации для гиперссылки на второй pastebin, извините! (
Обновление до Ответа1
Спасибо Мартину за объяснения. Я попытался выполнить следующие действия

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' неправильно?

Ответы [ 2 ]

1 голос
/ 30 октября 2010

Я бы попробовал следующий подход:

  • создайте скрипт / приложение, которое упаковывает этот двоичный файл g09, который вы запускаете, и запустите эту оболочку вместо
  • в скрипте, подождитечтобы поступил сигнал HUP (который должен быть получен при закрытии соединения ssh)
  • при обработке сигнала HUP, отправьте сигнал в вашу группу процессов (т. е. PID 0), который убивает все процессы в группе.

Отправка сигнала 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

Вы можете иметь столько дочерних процессов, сколько захотите (прямо или косвенно);все они получат сигнал - до тех пор, пока они не отсоединятся от группы процессов.

0 голосов
/ 17 февраля 2011

У меня была похожая проблема при использовании ssh -N (аналогично ssh -n), и kill -9 0 не работает для меня, если я запускаю его внутри скрипта, который инициирует вызов ssh.Я обнаружил, что kill <code>jobs -p завершает процесс ssh, что не очень элегантно, но я использую это в настоящее время.

...