- 论坛徽章:
- 0
|
原帖由 我learnc 于 2007-12-29 17:52 发表
谢谢,看来确实是这个原因造成的,我加了usleep后,现在已经跑到9.5W+了,仍然很正常。
是么?那么你试试这个程序,看看在你的机器上能fork多少次
#include <sys/wait.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
unsigned int gchild = 0;
static void
sigchild(int signo)
{
static int stat;
while ( waitpid(-1, &stat, WNOHANG) > 0 ) ;
}
int main(void)
{
pid_t pid;
int i;
if (signal(SIGCHLD, sigchild) == SIG_ERR)
{
printf("can't catch sigchild\n");
exit(1);
}
for (i=0; i<100000000; i++)
{
if ((pid = fork()) < 0)
{
perror("fork error");
printf("%u children forked in total\n", gchild);
exit(1);
}
else if (pid == 0)
{
printf("%u children forked in total\n", gchild);
exit(0);
}
gchild++;
}
exit(0);
} |
|
|