fork()函数入门级问题:fork()与进程数
这样一段代码:
最后还剩2个进程?为什么呢?
我的意见是 初始父进程 在第一次fork()后终止;第一子进程在第二次fork()后终止,然后就只剩下第二子进程了???
if ( (pid=fork())<0 ){ printf("error fork()\n"); exit(1) ; } else if (pid!=0) { exit(0); }// ...............................................................some other ,but have no fork() if ( (pid=fork()<0) ){ fputs("error fork()\n",stdout); exit(1) ; } else if (pid!=0) { exit(0); }void daemonize(const char *cmd){ int i,fd0,fd1,fd2; pid_t pid; struct rlimit rl; struct sigaction sa; umask(0); if ( getrlimit(RLIMIT_NOFILE,&rl)<0 ){ printf("%s can't get file limit.\n",cmd); exit(1) ; } if ( (pid=fork())<0 ){ printf("error fork()\n"); exit(1) ; } else if (pid!=0) { exit(0); } setsid();//creates a session and sets the process group ID. sa.sa_handler = SIG_IGN; sigemptyset(&sa.sa_mask); sa.sa_flags=0; if (sigaction(SIGHUP,&sa,NULL)<0){ printf("error sigaction()"); exit(1) ; } if ( (pid=fork()<0) ){ fputs("error fork()\n",stdout); exit(1) ; } else if (pid!=0) { exit(0); }/* if ( chdir("/tmp")<0 ){ FILE *fp=fopen("err","w"); fprintf(fp,"%d",errno); fprintf(fp,"woj"); printf("error chdir()\n"); exit(1) ; }*/ if (rl.rlim_max == RLIM_INFINITY){ rl.rlim_max = 1024; } for(i=0;i<rl.rlim_max;i++){ close(i); } fd0=open("/dev/null",O_RDWR); fd1=dup(0); fd2=dup(0); openlog(cmd,LOG_CONS,LOG_DAEMON);/* if(fd0!=0||fd1!=0||fd2!=0){ syslog(LOG_ERR,"unexpected file descriptors %d %d %d\n",fd0,fd1,fd2); exit(1); }*/}