하위 프로세스 및 트랩 종료

하위 프로세스 및 트랩 종료

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

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.shSIGUSR2 신호를 start.sh로 보냅니다(내 생각에는 그렇게 생각했습니다). 문제는 handleSignalstart.sh가 이미 실행 handleSignal하고 호출했기 때문에 mpiproc의 작업이 완료되지 않았다는 것입니다 exit 0. HandleSignal 호출을 프로세스 트리 위로 어떻게 이동합니까? 이는 먼저 mpiproc.sh가 신호를 처리해야 함을 의미합니다(start.sh는 어떻게든 해당 신호를 기다립니까?). 그런 다음 start.sh가 정리된 다음 종료됩니까?

감사해요!

관련 정보