systemctl이 닫힐 때 하위 프로세스를 정상적으로 종료합니다.

systemctl이 닫힐 때 하위 프로세스를 정상적으로 종료합니다.

좋아요센서 스미스답변자Bash의 하위 프로세스로 SIGTERM 전달, 그러나 내 스크립트의 경우 SIGTERM이 상위 bash 인스턴스와 내가 실행 중인 하위 인스턴스로 전송되었기 systemctl때문에 이중 SIGTERM이 발생했습니다 . systemctl결과적으로 내 자녀가 정상적으로 종료되기 전에 즉시 종료됩니다.

Bash 스크립트 기반 서비스에서 SIGTERM을 처리하는 올바른 방법은 무엇입니까?

답변1

그래서 나는 이것으로 끝났고 그것에 만족합니다.

#!/bin/bash

script_term()
{
    echo $0 SIGTERM
}

wait_for_child()
{
    term_child_pid=$!
    wait ${term_child_pid} 2>/dev/null
    trap - TERM INT
    wait ${term_child_pid} 2>/dev/null
}

trap 'script_term' TERM INT
node index.js
wait_for_child

상위 bash가 SIGTERM을 발행할 때 하위 프로세스를 SIGTERM하지는 않지만 내가 관심 있는 모든 경우에 올바르게 기다립니다.

관련 정보