シェルスクリプトでプロセスを起動し、ユーザーと対話できるようにしたいと思います(したがって、プロセスをバックグラウンドに置いて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; }'