killing subprocesses and traps

1

Eu tenho os dois scripts a seguir que simulam algum trabalho:

start.sh simplesmente lança 2 (mpi) processos com script 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

O cluster que estou executando o script start.sh envia um sinal SIGUSR2 para start.sh (é o que eu acho). O problema é que meu handleSignal em mpiproc não é concluído porque start.sh já executou seu handleSignal e calles exit 0 . Como posso fazer com que as chamadas handleSignal percorram a árvore de processos? Significado first mpiproc.sh precisa lidar com o sinal (start.sh de alguma forma aguarda isso?) E, em seguida, start.sh faz a limpeza e, em seguida, sai?

Obrigado!

    
por Gabriel 15.02.2016 / 21:23

0 respostas