我确实有要杀死的进程的 PID,但我确实想让它有机会平静地终止,而不执行 -9。
预期行为:检查 PID 是否仍在运行长达十秒并对其执行kill -9。
如果您可以在一行中完成此操作,则额外奖励。
答案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 被重用的情况下杀死错误的进程。