【Linux 进程控制】进程创建、进程终止、进程等待、进程替换

1.进程创建(fork)

  1. fork的头文件unistd.h

  1. fork的返回值子进程:0,父进程:子进程的pid

1.1子进程的PCB、代码和数据

写实拷贝原理

2.进程终止

2.1进程退出的三种场景:

  1. 正常退出,结果正确;

  1. 正常退出,结果错误;

  1. 代码异常终止

2.2常见退出方法:return

正常退出,结果正确:正常执行,return 0;

正常退出,结果错误:return 非0;

将错误码转化为错误信息

2.3代码异常退出,下面这个除零错误就是一个简单异常终止

执行结果:

2.4_exit和exit、return的区别

  • exit的头文件<stdlib.h>,_exit的头文件<unistd.h>;

  • exit和return结束会做收尾工作例如:刷新输出缓冲区,_exit则不会;

  • exit和return和_exit都是正常退出,结果正确或者不正确

3.进程等待

3.1进程等待的必要性

原因:当子进程退出,父进程不管不顾(不进行进程等待),就会进入“僵尸进程“,即使使用信号“kill -9“也杀不死它,一直等待父进程接收子进程的执行结果,导致内存泄漏;

3.2查看man手册

3.3学习waitpid()接口

3.3.1waitpid的第一个参数:子进程的pid或者-1

  • waitpid的返回值:等待成功子进程pid,等待失败-1;

3.3.2waitpid的第二个参数:

获取子进程退出结果(场景):

  1. 正常退出,结果正确;

  1. 正常退出,结果错误;

  1. 代码异常终止

解释:退出信号为0,退出状态的值才有价值,如果退出信号非0那么退出状态不采用;退出信号非0说明是异常退出

执行结果:

3.3.2.1.WIFEXITED和WEXITSTATUS分别获取信号和退出码

  • 没有信号退出码才有价值
  • WIFEXITED返回值没有信号为ture,有为false;
  • WEXITSTATUS返回值为退出码

3.3.3waitpid的第三个参数:控制等待方式阻塞等待和非阻塞等待

执行结果:

4.进程程序替换

Q:为什么需要进程程序替换?

A:当进程想执行一个新程序;

原理:代码和数据都采用写实拷贝的方法,PCB不变

执行结果:

4.1进程程序替换接口的规律

exec接口有很多

  1. 带'l'的,第二个参数使用可变参数列表;

  1. 带'v'的,的二个参数使用数组;

执行结果:

  1. 带'p'的,第一个参数不在用写全路径,写文件名,在环境变量PATH中找

  1. 带'e'的,进程程序替换不使用默认环境变量,手动输入;

执行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值