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()
単に信頼できないのですか?