Linux:进程控制之进程等待,进程替换

进程等待进程替换
摘要由CSDN通过智能技术生成

进程等待

1. 什么是进程等待?

父进程在fork出一个子进程之后,会等待子进程结束,完成一些资源回收的操作,如果不等待子进程结束,子进程就会变成僵尸进程,这样会造成内存泄漏。而父进程等待子进程结束的过程就叫进程等待。

2. 为什么要进行进程等待(进程等待的必要性)
  • 父进程如果在fork出子进程之后,没有对子进程等待,子进程就会变成“僵尸进程”,而这样会造成内存泄漏
  • 当进程变成僵尸进程时,指令“kill -9”也无法将僵尸进程杀死
  • 父进程fork出子进程一定是需要子进程来执行一些动作,如果父进程不去等待子进程完成,就不能知道交给子进程的任务是否正确完成;
  • 父进程fork子进程时,会给子进程分配资源,而在子进程结束之后,子进程的资源是要父进程回收的,所以父进程要通过进程等待的方式,回收子进程资源,并获取子进程退出信息;
3. 如何进行进程等待?

进行进程等待有两种方法:

  1. 调用wait()函数;
#include<sys/types.h>
#include<sys/wait.h>

	pid_t wait( int *status);

返回值:	成功时返回子进程的进程ID;失败返回-1,同时errno被置为ECHILD;
参数:	获取子进程退出状态(也可为NULL);
  1. 调用waitpid()函数
#include<sys/types.h>
#include<sys/wait.h>

	pid_t waitpid(pid_t pid, int *status, int options);

返回值:		当正常返回的时候返回收集到的子进程的进程ID;
			如果传参时options设置为WNOHANG方式,而等待时没有已经退出的子进程可收集,返回0;
			如果调用出错,则返回-1,并且将errno(错误码)设置成相应的值来指示错误;

参数:   pid==-1:	等待任一个子进程;	
		pid>0:		等待进程ID和pid值相等的进程 ;
		status:	获取子进程退出状态(也可为NULL);
		options: 	
					WNOHANG:如果pid指定的子进程没有结束,则waitpid()函数立即返回0,而不是阻塞在这个函数上等待;如果结束了,则返回该子进程的进程号
					WUNTRACED: 如果子进程进入暂停状态,则马上返回。

如何用参数status得出子进程的退出状态?
子进程的退出状态如何用参数status得出

进程替换

1. 什么是进程替换?

进程替换就是将物理内存上的一个进程的代码和数据替换成另一个需要执行进程的代码和数据,从而使进程执行不同的操作;

2.进程替换的原理?

进程替换并没有创建新的进程,替换前后的进程ID并未改变,进程替换只是用另一个新程序替换了当前进程的在物理内存上的代码段和数据段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值