この単純な「ulimit」について手伝ってもらえますか?

この単純な「ulimit」について手伝ってもらえますか?

不適切にコーディングされた無限ループ プログラムがあり、これをコマンド ラインで実行したいのですが、永久に実行したいわけではありません。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 でのコマンドのタイムアウト、不要な遅延なし

関連情報