【发布时间】:2016-06-30 02:26:36
【问题描述】:
我是操作系统课程的助教,学生的任务是开发fork bomb 解毒器。作为测试用例的一部分,我想开发一些看起来像叉子炸弹但实际上相当安全的东西(即产生许多进程,但这些进程被删除了)。我的问题是,在我的 OS X 机器上进行测试时,我注意到如果我将睡眠延迟设置得太低(~100000)和孩子的数量太高(~1000),它实际上会杀死我所有的用户进程。当我说的都是 Firefox、Xcode、Word,甚至 Finder 似乎都在下降。这对我来说似乎有些奇怪,因为该任务只有一个孩子,但我想知道 OS X 是否对用户可以拥有的子进程数量有限制。我无法在谷歌上找到任何东西,但欢迎提出任何建议。
特别是: 1)这段代码是否不合理,我错过了一些应该被杀死的明显原因? 2) OS X 中是否有一些文档可以解释我们看到这种行为的原因?
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int i;
pid_t pid;
if(argc < 2) {
printf("Usage: fork_safe n\n");
return 0;
}
int n = strtol(argv[1], NULL, 10);
for(i = 0; i < n; i++) {
pid = fork();
if(pid == 0){
break;
} else {
printf("child pid %d, killing...\n", pid);
usleep(10000);
kill(pid,SIGTERM);
fflush(stdout);
}
}
while(1);
return 0;
}
【问题讨论】:
-
在Ask Different 上提问可能会有所帮助。
标签: macos operating-system fork osx-elcapitan