我喜欢传感器史密斯回答于在 Bash 中将 SIGTERM 转发给子进程,但对于我的systemctl
脚本,它导致了一个双 SIGTERM,因为systemctl
将 SIGTERM 发送到父 bash 实例和我正在运行的子实例。结果是在我的孩子可以优雅地关闭之前立即终止。
在基于 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 信号。