Như Tsf chỉ ra, vấn đề là do một bug in kernel 2.6.28. Tôi để lại câu trả lời ban đầu của tôi, bởi vì tôi nghĩ rằng nó có thể hữu ích anyway.
Từ manpage ulimit
-t The maximum amount of cpu time
in seconds.
Điều quan trọng đối với ulimit chỉ CPU thời gian. Hãy thử bắt đầu chương trình của bạn như sau:
time myprogram
Điều đó sẽ cho bạn biết lượng thời gian CPU thực sự sử dụng.
Nghi ngờ của tôi là vòng lặp vô tận của bạn chứa sleep()
và thời gian ngủ không đóng góp vào thời gian CPU của quy trình.
này bị giết sau một giây:
[email protected]:~$ bash
[email protected]:~$ ulimit -t 1; for ((i=1; 1; i++)); do a=1; done
Killed
Điều này dường như chạy mãi mãi (nhưng tất nhiên không):
[email protected]:~$ bash
[email protected]:~$ ulimit -t 1; for ((i=1; 1; i++)); do sleep 1; done
Đo CPU thời gian như thế này ...
[email protected]:~$ time for ((i=1; i<5; i++)); do sleep 1; done
... và 5 giây sau ...
real 0m4.008s
user 0m0.000s
sys 0m0.012s
... chỉ 12 ms Thời gian CPU được sử dụng.
Tôi đã thử nó trên 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
Nguồn
2009-06-10 21:58:47
Tôi không nghĩ rằng nó thuộc về serverfault. Điều gì làm bạn nghĩ như vậy? –
Có thể bạn nói đúng Tôi chỉ phản ứng nhanh như vậy –