ubuntu下ulimit -t

发布于 2024-07-24 21:12:48 字数 305 浏览 5 评论 0原文

我正在运行 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

其中“myprogram”是无限循环。 我预计程序会在1秒后中断,但它并没有停止。 我在 Linux Fedora 安装上尝试了同样的操作,它按预期工作。

是否需要设置一些配置才能使其正常工作?

-- tsf

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

記憶穿過時間隧道 2024-07-31 21:12:48

正如 Tsf 指出的,问题是由于 内核 2.6.28 中的错误
我留下了原来的答案,因为我认为无论如何它都会有帮助。

来自 ulimit 联机帮助页

-t 最大 CPU 时间
几秒钟内。

对于 ulimit 而言,重要的只是CPU 时间
尝试像这样启动你的程序:

time myprogram

这将显示它实际使用了多少 CPU 时间。

我怀疑你的无限循环包含 sleep()
并且睡眠时间不影响进程的CPU时间。

一秒后就会被杀死:

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

...仅使用 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

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文