![systemctl이 닫힐 때 하위 프로세스를 정상적으로 종료합니다.](https://linux55.com/image/187490/systemctl%EC%9D%B4%20%EB%8B%AB%ED%9E%90%20%EB%95%8C%20%ED%95%98%EC%9C%84%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EC%A0%95%EC%83%81%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%A2%85%EB%A3%8C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
좋아요센서 스미스답변자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하지는 않지만 내가 관심 있는 모든 경우에 올바르게 기다립니다.