уничтожение подпроцессов и ловушек

уничтожение подпроцессов и ловушек

У меня есть следующие два скрипта, которые имитируют некоторую работу:

start.shпросто запускает 2 (mpi) процесса с помощью скрипта mpiproc.sh.

старт.ш

#!/bin/bash

function trap_with_arg() {
    func="$1" ; shift
    for sig ; do
        trap "$func $sig" "$sig"
    done
}

function handleSignal() {
    echo "Received signal (sleep for 10 sec)"
    for i in {1..2}
    do
      echo "start.sh: sleeping $i"
      sleep 1s
    done
    exit 0
}

# Setup the Trap
trap_with_arg handleSignal SIGINT SIGTERM SIGUSR1 SIGUSR2

mpirun -n 2 mpiproc.sh

mpiproc.sh

function trap_with_arg() {
    func="$1" ; shift
    for sig ; do
        trap "$func $sig" "$sig"
    done
}


function handleSignal() {
    echo "Rank: ${OMPI_COMM_WORLD_RANK} : Received signal (sleep for 10 sec)"
    for i in {1..10}
    do
      echo "Rank: ${OMPI_COMM_WORLD_RANK} sleeping $i"
      sleep 1s
    done
    exit 0
}

# Setup the Trap
trap_with_arg handleSignal SIGINT SIGTERM SIGUSR1 SIGUSR2

echo "MPI Proc  Rank: ${OMPI_COMM_WORLD_RANK} start."
sleep 30s

Кластер, на котором я запускаю скрипт, start.shотправляет сигнал SIGUSR2 в start.sh (так я думаю). Проблема в том, что мой handleSignalin mpiproc не завершается, потому что start.sh уже выполнил свои handleSignalи вызывает exit 0. Как мне заставить вызовы handleSignal перемещаться вверх по дереву процессов? То есть сначала mpiproc.sh должен обработать сигнал (start.sh каким-то образом ждет этого?), а затем start.sh выполняет очистку и затем завершает работу?

Спасибо!

Связанный контент