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するわけではありませんが、私が興味のあるすべての場合に正しく待ちます。

関連情報