하위 프로세스 및 트랩 종료

하위 프로세스 및 트랩 종료

일부 작업을 시뮬레이션하는 다음 두 스크립트가 있습니다.

start.sh단순히 script 로 2개의 (mpi) 프로세스를 시작합니다 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

스크립트를 실행 중인 클러스터는 start.shstart.sh에 SIGUSR2 신호를 보냅니다(제 생각에는 그렇습니다). 문제는 start.sh가 이미 and 호출을 handleSignal실행했기 때문에 mpiproc의 내 작업이 완료되지 않는다는 것입니다 . HandleSignal 호출이 프로세스 트리 위로 이동하도록 하려면 어떻게 해야 합니까? 먼저 mpiproc.sh가 신호를 처리해야 하고(start.sh가 어떻게든 이를 기다려야 합니까?) start.sh가 정리를 수행한 다음 종료된다는 의미입니까?handleSignalexit 0

감사해요!

관련 정보