如何在强制终止之前给进程几秒来终止进程?

如何在强制终止之前给进程几秒来终止进程?

我确实有要杀死的进程的 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 被重用的情况下杀死错误的进程。

相关内容