我正在创建一个 shell 并在创建自己的ulimit
函数时遇到问题:我想限制一个进程的时间,并使用setrlimit
它。但似乎当我打电话时execvp
,时间限制被抹去了。
在此示例代码中,当我让 时while(1)
,子进程收到 aSIGXCPU
并在 3 秒后被杀死。但是当我这样做时execvp(...)
,它永远不会被杀死。
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/resource.h>
int main(void) {
struct rlimit t = {3, 8};
uint32_t child_pid = fork();
// father
if (child_pid != 0) {
waitpid(child_pid, NULL, 0);
// child
} else {
setrlimit(RLIMIT_CPU, &t);
char* s[3];
s[0] = "sleep";
s[1] = "1000";
s[2] = NULL;
/* while(1); */
execvp(*s, s);
}
}
如果我是对的并且我设置的时间限制setrlimit
被删除了,那该怎么办呢?
感谢帮助。