Unterprozesse und Fallen beenden

Unterprozesse und Fallen beenden

Ich habe die folgenden zwei Skripte, die einige Arbeiten simulieren:

start.shstartet einfach 2 (MPI-)Prozesse mit Skript mpiproc.sh.

start.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

Der Cluster, in dem ich das Skript ausführe, start.shsendet ein SIGUSR2-Signal an start.sh (das glaube ich zumindest). Das Problem ist, dass mein handleSignalin mpiproc nicht beendet wird, weil start.sh bereits ausgeführt hat handleSignalund aufruft exit 0. Wie kann ich dafür sorgen, dass die handleSignal-Aufrufe den Prozessbaum hinauf wandern? Bedeutet das, dass zuerst mpiproc.sh das Signal verarbeiten muss (start.sh wartet irgendwie darauf?) und dann start.sh die Bereinigung durchführt und dann beendet wird?

Danke!

verwandte Informationen