ulimit -t under ubuntu

断了今生、忘了曾经 提交于 2019-12-21 09:14:16

问题


I am running Ubuntu Linux (2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009 i686 GNU/Linux) and it seems that the command "ulimit -t" does not work properly. I ran:

ulimit -t 1; myprogram

where 'myprogram' is an endless loop. I expected the program to be interrupted after 1 second, but it did not stop. I tried the same thing on a Linux Fedora installation and it worked as expected.

Is there some configuration that has to be set for it to work properly?

-- tsf


回答1:


As Tsf pointed out, the problem is due to a bug in kernel 2.6.28. I leave my original answer, because I think it could be helpful anyway.

From the ulimit manpage

-t The maximum amount of cpu time in seconds.

What counts in respect to ulimit is only CPU time. Try to start your program like this:

time myprogram

That will show you how much CPU time it really uses.

My suspicion is that your endless loop contains sleep() and sleep time does not contribute to the CPU time of the process.

This gets killed after one second:

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

This seems to run forever (but of course does not):

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

Measure CPU time like this...

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

...and 5 seconds later...

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

...only 12 ms CPU time used.

I tried it on 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


来源:https://stackoverflow.com/questions/978317/ulimit-t-under-ubuntu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!