{
fprintf( stderr, "子进程退出[%d]\n", getpid() );
exit( 0 );
}
fprintf( stderr, "孙子进程[%d]\n", getpid() );
while( 1 )
{
}
exit( 0 );
}
/* wait第一个子进程退出 */
waitpid( pid, NULL, 0 );
fprintf( stderr, "父进程[%d]\n", getpid() );
while( 1 )
{
}
exit(0);
}
第一次fork后:父进程、子进程
第二次fork后:子进程、孙子进程
第一次fork后父进程wait子进程,
第二次fork后子进程立即退出,使得孙子进程成为孤儿进程继续运行,同时也使得父进程wait完成结束进程挂起状态继续运行处理。
这样可以避免僵尸进程的产生,同时父进程和孙子进程可以同时运行处理业务,避免了资源等待的问题。
如何防止僵尸进程的产生之fork两次,布布扣,bubuko.com
原文地址:http://blog.csdn.net/ssz912728941/article/details/34801825