不適切にコーディングされた無限ループ プログラムがあり、これをコマンド ラインで実行したいのですが、永久に実行したいわけではありません。ulimit を使用すれば、永久にループする場合は切断されます。
私はしようとしています:
$> bash -c "ulimit -t 1; java myinfloopprogram"
しかし、何も起こっていないようです。何が起こっているのでしょうか。コマンドライン コマンドが間違っているのでしょうか? myinfloopprogram は正常に動作します。
ターミナルを実行しており、バージョンは Ubuntu 9.10 です。
答え1
ループプログラムは実際に CPU を使用していますか?
-t は CPU 時間用であり、実時間用ではないため、プログラムが実際に CPU 時間を使用していない場合は終了されません。
答え2
代わりに次のようなことを試してみてください:
java myinfloopprogram &
pid=$!
for i in $(seq 1 60); do
kill -0 $pid >/dev/null || break
sleep 1
done
kill -0 $pid >/dev/null || kill -TERM $pid
答え3
ulimit
おそらく必要なものではないでしょう。何らかの bash タイムアウト機能が必要です。bash に組み込まれているものはありませんが、これを行うためのスクリプトがいくつかあります。例:https://stackoverflow.com/questions/687948/bash でのコマンドのタイムアウト、不要な遅延なし