我是操作系統課程的助教,學生的任務是開發一個fork bomb defuser。作爲測試案例的一部分,我想開發一種看起來像叉炸彈的東西,但事實上它相當安全(即消除了許多進程,但這些進程已被刪除)。我的問題是,在我的OS X機器上進行測試時,我注意到如果將睡眠延遲設置得太低(〜100000)並且孩子數量太高(〜1000),它實際上會殺死我所有的用戶進程。當我說我的意思是Firefox,Xcode,Word,甚至Finder似乎都停止了。這對我來說似乎有點奇怪,因爲任務只有一個孩子,但我想知道OS X是否對用戶可以擁有的子進程數量有限制。我無法在Google上找到任何內容,但有任何建議。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;
}
這可能有助於問這個上[提出不同(http://apple.stackexchange.com/)。 –