9

Ubuntu Linux (2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009 i686 GNU/Linux) を実行していますが、コマンド「ulimit -t」が正しく機能しないようです。私は走った:

ulimit -t 1; マイプログラム

ここで、'myprogram' は無限ループです。プログラムは 1 秒後に中断されると思っていましたが、停止しませんでした。Linux Fedora インストールで同じことを試してみたところ、期待どおりに機能しました。

正しく動作するために設定する必要がある構成はありますか?

--tsf

4

1 に答える 1

17

Tsf指摘したように、問題はカーネル 2.6.28 のバグによるものです。とにかく役立つと思うので、元の回答を残します。

ulimit マンページから

-t The maximum amount of cpu time in seconds.

ulimit に関して重要なのは、CPU 時間のみです。次のようにプログラムを開始してみてください。

time myprogram

これにより、実際に使用されている CPU 時間が表示されます。

私の疑いは、無限ループが含まれてsleep() おり、スリープ時間がプロセスの CPU 時間に寄与していないことです。

これは1秒後に殺されます:

me@host:~$ bash
me@host:~$ ulimit -t 1; for (( i=1; 1; i++ )); do a=1; done
Killed

これは永遠に実行されるようです (もちろんそうではありません):

me@host:~$ bash
me@host:~$ ulimit -t 1; for (( i=1; 1; i++ )); do sleep 1; done

このようにCPU時間を測定します...

me@host:~$  time for (( i=1; i<5; i++ )); do sleep 1; done

...そして5秒後...

real        0m4.008s
user        0m0.000s
sys         0m0.012s

...使用される CPU 時間はわずか 12 ミリ秒です。

ubuntu Jaunty Jackalope (9.04) で試してみました

Linux host 2.6.28-11-generic #42-Ubuntu SMP 
Fri Apr 17 01:57:59 UTC 2009 i686 GNU/Linux
于 2009-06-10T21:58:47.727 に答える