実行時間が所定の特定の値を超えると、プロセスは自動的に終了します。

実行時間が所定の特定の値を超えると、プロセスは自動的に終了します。

シェルスクリプトでプロセスを起動し、ユーザーと対話できるようにしたいと思います(したがって、プロセスをバックグラウンドに置いてPIDをインポートして起動し、次に完全性sleepチェックなどを実行することはできませんkill)。しばらく(たとえば、2分)後もまだ実行中で、その後は終了します。

目的は、この機能が組み込まれていないプログラムに対してウォールクロックランタイムタイムアウトを実装することです。

bashシェルスクリプトでこれを行う方法はありますか?

ベストアンサー1

まったく新しいLinuxシステム(より正確にはGNU coreutils ≥8.5)では簡単です。

timeout 2m myprogram

POSIXシェル機能のみを使用すると近接できますが、タイムアウトが発生した場合はいくつかの競合状態があります(理論的には、2番目のバックグラウンドプロセスのPIDはkill $s実行前に再利用できます)。

myprogram <>/dev/tty & p=$!;
{ sleep 120; kill $p; } & s=$!;
wait $p; kill $s

プログラムの出力が必要な場合でも、競合状態なしで動作する良い方法があります。これは以下を使用するきちんとしたトリックです。プロセスグループ。これはありがとう、Stephen Jimenezに行ったことがありますか?

sh -ic '{ myprogram <>/dev/tty; kill 0; } |
        { sleep 120; kill 0; }'

おすすめ記事