我试图用来setrlimit()
限制一个过程所花费的时间。但是,当我执行某些操作(例如printf()
.
这是一个说明问题的测试程序:
#include <sys/resource.h>
#include <stdio.h>
int main(void) {
int i;
struct rlimit limit;
limit.rlim_cur = 3;
limit.rlim_max = 3; // send SIGKILL after 3 seconds
setrlimit(RLIMIT_CPU, &limit);
// doesn't get killed
for(i=0; i<1000000; i++)
printf("%d",i);
return 0;
}
但是,如果我用一个不同的例程替换 for 循环,比如天真的斐波那契:
int fib(int n) {
if(n<=1) return 1;
return fib(n-1)+fib(n-2);
}
int main(void) {
...
fib(100);
...
}
它完美地工作。这里发生了什么?setrlimit()
简直不靠谱?