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で始まります。