Убейте все процессы, порожденные родителем с `ssh -x -n` на других хозяевах

StackOverflow https://stackoverflow.com/questions/4057758

  •  27-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

killme() { kill 0 ; } ; #Make calls to prepare for running G09 ; 
g09 < "$g09inp" > "$g09out" &
trap killme 'TERM'
wait

но когда крутящий момент / 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' неправильный ?

Это было полезно?

Решение

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

  • Создайте скрипт / приложение, которое включает этот двоичный G09, который вы начинаете, и вместо этого начну эту обертку
  • В скрипте дождитесь прибытия сигнала HUP (который должен быть получен, когда соединение SSH закрыто)
  • При обработке сигнала HUP отправьте сигнал в группу процессов (т.е. PID 0), которая убивает все процессы в группе.

Отправка сигнала убийства в группу процессов действительно легко: kill -9 0. Отказ Попробуй это:

#!/bin/sh
./b.sh 1 &
./b.sh 2 &
sleep 10
kill -9 0

где Б.Ш.

#!/bin/sh
while /bin/true
do
  echo $1
  sleep 1
done

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top