
終了したいプロセスのPIDがありますが、-9を実行せずに正常に終了する機会を与えたいと思います。
予想される動作:PIDが最大10秒間実行され続けていることを確認し、kill -9を実行します。
1行でこれを行うことができればボーナスです。
答え1
より良い方法(他のプロセスの同じPID終了を防ぐ)は次のとおりです。
function kill_gracefully() {
pid=$1; [[ -z $pid ]] && return; # check arg
kill $pid; # kill once
i=0;
while kill -0 $pid; do # while pid is alive
sleep 0.1;
((i+=1)); # count ++
if [[ $i -gt 10 ]];then # wait for 10 secs at most
kill -9 $pid; # kill if timeout
break;
fi;
done;
}
上記の方法は、負荷の高いシステム(頻繁にフォーク)で失敗する可能性があります。
答え2
kill -- "$pid"; sleep 10; kill -s KILL -- "$pid"
Debian ベースのシステムの場合:
echo "$pid" | start-stop-daemon --pidfile /dev/stdin --stop --oknodo --name "$process_name" --user "$user" --retry 10
PIDを再利用する場合は、間違ったプロセスが終了するのを防ぐために、一致する基準(ユーザー名やコマンド名など)を指定できます。