無限ループのために親と子を殺す

無限ループのために親と子を殺す

cronによって毎時間実行されるプロセスがあります。これらのプロシージャは他のプロシージャ(ソースは提供されていません)を呼び出します。つまり:(./childProc.shこの詳細が重要かどうかわからない)

子プロセスに無限ループがあるので(まだなぜ終わらないのかを理解しようとしています)、再実行する前に関連プロセスをすべて終了する必要があります。

見つけました。この投稿そしてこの記事(PPID部分を殺す)kill -9 -$PPID しかし、:との違いを理解していませんkill -9 -- -$PPID

私の質問は:
ここで何を意味しますか--?一方、-9 (SIGKILL)これはbashスクリプトプロセスを終了する正しい信号ですか、それとも強すぎますか?

最後に、動作(プロセスがまだ実行中かどうか)を確認する方法は、PIDとPPIDを含むファイルを作成することでした。

#!/bin/bash

# PID FILE 
PID_FILE="$BASE_BACKUP_DIR"/".pid.$HOSTNAME"; 

## If exists PID_FILE, kill 
if [[ -f "PID_FILE" ]]; then 
    pid_last=$(head -1 | cut -d " " -f1); 
    ppid_last=$(head -1 | cut -d " " -f2); 
    echoErr "Process is still running. Parent $ppid_last, child: $pid_last. "; 
    kill -9 -- -"$ppid_last"; 
fi;

## Create PID file
echo "$$ $PPID" > "$PID_FILE"; 

####### All process ####### 

# at the end, delete PID_FILE 
rm -f "$PID_FILE";
exit 0; 

どう思いますか?改善された点がありますか?

ベストアンサー1

kill -9 -$PPID間に違いはありませんkill -9 -- -$PPID

そこはいkill -$PPIDとの違いは次のとおりですkill -- -$PPID--オプション引数の終わりを表示します。 this 以降の引数--は で始まっても-オプションとは見なされません。それ以外の場合は、--送信される-$PPID信号として扱われます。

IMHO、SIGKILLが強すぎます。 SIGINT、SIGHUP、またはデフォルトのSIGTERMで始まります。

おすすめ記事