プロセスを強制終了する前にプロセスを終了できるように、数秒の時間を費やすにはどうすればよいですか?

プロセスを強制終了する前にプロセスを終了できるように、数秒の時間を費やすにはどうすればよいですか?

終了したいプロセスの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;     
}

上記の方法は、負荷の高いシステム(頻繁にフォーク)で失敗する可能性があります。

おすすめ記事