fork()进程复制简单例题,僵尸进程,孤儿进程

本文介绍了Linux中的fork()函数,详细阐述了进程复制的原理,并通过多个示例解释了如何创建和理解进程复制。同时,讨论了僵尸进程和孤儿进程的概念,重点讲解了解决僵尸进程的方法,如使用wait(NULL)函数。
摘要由CSDN通过智能技术生成

刷新缓冲区:

1.程序结束前

2.碰见换行符\n

3.碰见fflush() fflush(stdout);

4.缓冲区满了

return:关键字 结束当前功能

exit:函数调用 结束进程前刷新缓冲区再调用_exit exit(0)正常退出,非零异常退出

_exit:内核级别函数 只结束程序不会刷新缓冲区

fork() 进程复制(除了进程PID所有内容状态全复制)

返回值为pid_t —>int的重命名 父进程返回值大于0,子进程返回值小于0 -1复制失败

头文件为 #include<unistd.h> #include<sys/types.h>

fork复制后,子进程从fork后的语句开始执行

示例1:

int main()
{
printf("a\n");
fork();
}

打印一个a 父进程遇见\n直接刷新缓冲区打印a,fork复制一份后子进程从fork以下的语句继续执行,fork后没有语句程序结束

示例2:

int main()
{
    fork();
    printf("a\n");
    return 0;
}

打印两个a fork复制一份,父进程向下执行打印一个a,子进程执行fork以下的语句打印一个a

示例3:

int main()
{
    printf("a");
    fork();
}

打印两个a 父进程缓冲区一个a,fork后复制父进程缓冲区里的一个a,程序结束

示例4:

int main()
{
    for(int i=0;i<2;i++)
    {
        fork();
        printf("a\n");
    }
 
}

打印六个a

示例5:

int main()
{
    for(int i=0;i<2;i++)
    {
        fork();
        printf("a");
    }
 
}

打印8个a

示例6:

fork()||fork();
printf("a\n");

3个a

僵尸进程:  

子进程先于父进程结束,父进程没有获取到子进程的退出码,子进程即为僵尸进程

解决僵尸进程:

头文件 #include<sys/wait.h>

wait(NULL); 阻塞函数 一般不会用到退出码,参数传空

 

孤儿进程:

父进程先于子进程结束,子进程的父进程由init进程接管

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值