linux之进程等待
来源:互联网 发布:淘宝和京东哪个质量好 编辑:程序博客网 时间:2024/06/08 09:04
wait和waitpid函数
一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个。这个进程的父进程可以调用wait或waitpid 获取这些信息,然后彻底清除掉这个进程。
我们知道一个进程的退出状态可以在Shell中用特殊变量$?查看,因为Shell是它的父进程,当它终止时Shell调用wait或waitpid得到它的退出状态同时彻底清除掉这个进程。
当一个进程正常或异常终止时,内核就向其父进程发送一个SIGCHLD信号。因为子进程终止是一个异步事件,所以发生这种信号也是内核向父进程发的异步通知。父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用执行的函数。对于这种 信号的系统默认动作是忽略它。
头文件:#include<sys/types.h>
#include<sys/wait.h>
等待函数1: pid_t wait(int*status);
返回值:成功返回被等待进程pid,失败返回-1。
参数: 输出型参数,获取子进程退出状态,不关心则可以设置成为NULL
如果进程由于接收到SIGCHLD而调用wait,则可期望wait会立即返回。但如果在任意时刻调用wait,则进程可能塞。 在一个子进程终止前,wait使其调用者阻塞,而waitpid有一个选项,可使调用者不阻塞。 如果status不是一个空指针,则终止进程的终止状态就存放在它所指的单元内。如果不关心终止状态,则可将该参数设为空指针(waitpid同样适用)。
等待函数2: pid_t waitpid(pid_t pid, int *status, int options);
返回值:(1). 当正常返回的时候waitpid返回收集到的⼦子进程的进程ID;
(2). 如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集, 则返回0;
(3). 如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在;
(4). 当pid所指示的子进程不存在,或此进程存在,但不是调用进程的子进程,waitpid就会出错返回,这时errno被设置为ECHILD.
参数:(1)pid==-1,等待任一个子进程,与wait等效。
pid>0.等待其进程ID与pid相等的子进程。
pid==0等待其组ID等于调用进程组ID的任一个子进程。
pid<-1等待其组ID等于pid绝对值的任一子进程。
(2)status: WIFEXITED(status) : 若为正常终止子进程返回的状态,则为真。(查看进程是 否是正常退出) WEXITSTATUS(status) : 若WIFEXITED非零,提取子进程退出码。(查看进程 的退出码)
(3). options: WNOHANG :若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。 若正常结束,则返回该子进程的ID。
WIFEXITED(status) : 若为正常终止子进程返回的状态,则为真。
WEXITSTATUS(status) : 若WIFEXITED非零,返回子进程退出码,提取进程退出返回值,如果子进程调用exit(7),WEXITSTATUS(status)就会返回7.
阻塞式等待代码:
运行结果:
非阻塞式等待代码:
运行结果:
- Linux之进程等待
- linux之进程等待
- Linux 进程等待队列
- Linux进程等待
- 浅谈Linux进程等待
- Linux编程基础之进程等待(wait()函数)
- Linux编程基础之进程等待(wait()函数)
- linux 进程等待 wait 、 waitpid
- 【Linux】进程等待&程序替换
- 【Linux】进程等待&程序替换
- 【linux】进程创建、等待、终止
- linux创建进程和等待进程退出
- Linux父进程等待子进程结束
- 【经典转载】Linux进程学习系列之五 等待进程结束wait()和waitpid()函数
- linux 之 等待队列
- linux之等待队列
- Linux--等待进程结束wait()和waitpid()
- linux进程的休眠(等待队列)
- get set操作对象属性(getter,setter)js
- git命令
- js笔记五:数组基础篇
- 第一篇
- Dalvik指令集
- linux之进程等待
- Android开发性能优化
- html标签的思维导图
- 深入了解AccessibilityService
- scrapy-2
- 轻松修改mysql的root密码
- 面试:c++(算法)
- 未来的趋势
- xx-net启动问题