プロセスをバックグラウンドで待機させ、KILL以外の信号で終了する方法

プロセスをバックグラウンドで待機させ、KILL以外の信号で終了する方法

私はバックグラウンドで実行され、毎時間いくつかのタスクを実行するスクリプトが欲しい。信号を受信したら終了する必要があります。最後に終了する前に、いくつかのクリーンアップ操作を実行する必要があります。

この概念に基づいて、次のように書きました。

trap 'clean_up; exit' SIGTERM
while true
do
    someActions
    sleep 1h
done

スクリプトを実行します。

./script &

私はスクリプトを殺す。

kill -SIGTERM <pid>

スクリプトが期待どおりに機能していないことがわかりました。その理由は、信号だけで眠るプロセスを殺すことができるからだと思いますSIGKILL。しかし、一方でSIGKILL出る前に掃除をするように指示することはできません。

それでは、プロセスがバックグラウンドで待機し、他の信号を受信したときに終了させる方法は何ですかSIGKILL

ベストアンサー1

「期待どおりに動作しない」とは、SIGTERM ハンドラを作成したが、SIGTERM に対して実行されなかったことを意味します。コードに間違いがあります

以下は実際の例です。

#!/bin/bash

cleanup () {
        echo "goodbye!"
        exit 0
}

trap 'cleanup' SIGTERM

while sleep 1; do
        echo $BASHPID
done

反応は予想通りでしたkill -SIGTERM。すでに知っているSIGKILLとSIGSTOPを除いて、任意の信号を使用できます。

おすすめ記事