2009-06-10 62 views
7

我正在運行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在ubuntu下

ulimit -t 1; myprogram

其中'myprogram'是一個無限循環。我希望程序在1秒後中斷,但並沒有停止。我在Linux Fedora安裝上嘗試了同樣的事情,它按預期工作。

是否有一些配置需要設置才能正常工作?

- TSF

+0

我不認爲這屬於對serverfault。是什麼讓你這麼想的? – 2009-06-10 21:57:08

+0

是的,也許你是對的我只是反應如此迅速 – 2009-06-10 22:33:17

回答

16

由於Tsf指出,這個問題是由於bug in kernel 2.6.28。 我留下了我的原始答案,因爲我認爲它可能會有所幫助。

從手冊頁的ulimit

-t The maximum amount of cpu time in seconds.

在什麼方面的ulimit重要的是隻有CPU時間。 嘗試啓動你的程序是這樣的:

time myprogram 

會告訴你的CPU多少時間真的使用。

我的懷疑是你的無限循環包含sleep() 並且睡眠時間不會影響進程的CPU時間。

這被一秒後被殺:

[email protected]:~$ bash 
[email protected]:~$ ulimit -t 1; for ((i=1; 1; i++)); do a=1; done 
Killed 

這似乎永遠運行(當然不是):

[email protected]:~$ bash 
[email protected]:~$ ulimit -t 1; for ((i=1; 1; i++)); do sleep 1; done 

測量CPU時間是這樣的...

[email protected]:~$ time for ((i=1; i<5; i++)); do sleep 1; done 

... 5秒後...

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

...僅使用12 ms CPU時間。

我試了一下在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