进程等待:父进程等待子进程的退出,获取退出子进程的返回值,释放退出子进程的资源为了避免产生僵尸进程
操作:
pid_t wait(int* status);
status:一个整形空间的地址,用于获取退出子进程返回值
返回值:成功返回退出子进程的pid,失败返回-1;
等待任意一个子进程的退出,如果当前没有子进程退出则一直阻塞等待
阻塞:为了完成一个功能,发起调用,若当前不具备完成条件,则一直等待
非阻塞:为了完成一个功能,发起一个调用,若当前具备完成条件,则立即返回
pid_t waitpid(pid_t childpid,int * status,int options)
可以等待任意一个子进程退出,也可以只等待指定的子进程;
可以阻塞等待子进程退出,也可以非阻塞等待子进程退出
childpid:-1表示等待任意子进程,大于0表示等待指定的子进程,
status:用于获取子进程的返回值
options:0-默认阻塞等待;WNOHANG-设置非阻塞等待
返回值:错误返回-1;没有子进程退出返回0;有子进程
一个程序在运行中,如果产生了某种错误(比如内存访问错误),
系统就会给进程发送一个指定的信号表示进程出现了某个错误事件,收到这个信号后,进程(崩溃)退出。
异常信号退出值为0,表示进程正常退出,非0表示异常退出
代码转换:1.判断进程是否正常退出2.获取退出的实际返回值
status&0x7f==0; (status>>8 &0xff
WIFEXIETED(status) WEXIT
程序替换:替换一个进程正在调度运行的程序,
在一个进程中执行程序替换接口,就能实现改变当前调用进程运行的程序
程序替换,只是替换了运行的程序,而pcb中也只是车用心初始化了一些信息 (虚拟地址空间,页表…….)
Exec函数族:一个系统调用接口+五个库函数
./main -a -l -p
第一个参数是新的程序文件路径名,第二参数是程序运行参数,第三个参数是环境变量
exec函数有p时,程序文件若是命令程序可以不用带路径
带p的函数,常用于执行替换命令程序时使用 默认去path 环境变量指定的路径下找程序
Exec函数有e时,表示有我们自己设定环境变量,否则默认使用原有环境变量