首页 > 代码库 > 如何防止僵尸进程的产生之fork两次
如何防止僵尸进程的产生之fork两次
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<signal.h>
int main( void )
{
pid_t pid;
if( (pid=fork()) < 0 )
{
fprintf(stderr, "main 1 fork err!\n");
return 0;
}
else if( pid == 0 )
{
if( (pid=fork()) < 0 )
{
fprintf(stderr, "第二次fork err!\n");
exit( -1 );
}
else if( pid > 0 )
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<signal.h>
int main( void )
{
pid_t pid;
if( (pid=fork()) < 0 )
{
fprintf(stderr, "main 1 fork err!\n");
return 0;
}
else if( pid == 0 )
{
if( (pid=fork()) < 0 )
{
fprintf(stderr, "第二次fork err!\n");
exit( -1 );
}
else if( pid > 0 )
{
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完成结束进程挂起状态继续运行处理。
这样可以避免僵尸进程的产生,同时父进程和孙子进程可以同时运行处理业务,避免了资源等待的问题。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。