进程等待
来源:互联网 发布:东方购物软件 编辑:程序博客网 时间:2024/06/09 13:44
进程等待——可以是进程组成员的等待,也可以是父进程对子进程的等待。
当一个进程结束时,Linux将产生一个SIGCHLD信号通知其父进程。在父进程未查询到子进程的结束原因时,该子进程虽然停止了,但是并没有结束,这个时候的这个进程被称为zombie process(僵尸进程)。这个时候就需要使用进程等待的系统调用(wait / waitpid)
#include<sys/types.h>
#include<sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid,int *status,int options);
wait----用于等待子进程,参数status是一个整数指针,当子进程结束时,将子进程的结束状态字存放在该指针指向的缓冲区。调用wait时,父进程将会被挂起,直至该进程的一个子进程结束,该调用才会返回。如果调用wait的进程没有子进程,该调用就会失败。如果调用成功时,返回值就是等待状态的PID;调用失败的时候,返回值是-1.
waitpid---waitpid的调用要比wait灵活一些,它可以用来等待指定的一个进程,可以使进程不挂起而立刻返回。参数pid用于指定所等待的进程。参数option用于指定进程所做的操作,它可以取 0(表示将进程挂起等待其结束) /WNOHANG(表示不使进程挂起而立刻返回) /WUNTRACEO(表示如果进程已结束则返回)
调用waitpid pid的取值
pid取值 含义
pid>0 等待进程ID为pid所指定值的子进程
pid=0 等待进程组ID等于发出调用进程的进程组ID的子进程
pid=-1 等待所有子进程(相当于wait调用)
pid<-1 等待进程组ID为pid的绝对值的子进程(|-1| /|1|)
参数status不为NULL时,若函数成功返回,则将子进程的结束状态字存放在status所指向的缓冲区中(利用该状态字,则可以使用Linux系统定义的宏来了解子程序结束的原因)
WIOFEXITED(status)---子进程正常结束时,返回值为真。
WIFSIGNALED(status)---子进程接收到信号结束时,返回值为真;如果进程接收到信号调用时调用exit函数结束,则返回值为假。
WIFSTOPPED---在调用函数waitpid时设定了WUNTRACEO选项,且该子进程使waitpid返回时,这个宏返回值为真。
WSTOPSIG---当WIFSTOPPED的返回值为真时,该宏返回停止该进程的信号的值。
WTERMSIG---当WIFSGNALED的返回值为真时,该宏返回终止该进程的信号的值。
WEXITSTATUS---当WIFEXITED的返回值为真时,这个宏才可以使用,该宏返回由子进程调用-exit(status)或exit(status)时设置的调用参数status.
函数wait3和wait4(相当于wait和waitpid,只是多了一个参数rusage,该参数是一个结构指针,调用这两个指针时,如果rusage不为NULL,则关于子进程执行时的相关信息被写入指针指向的缓冲区内)
#define _USE_BSD
#include<sys/types.h>
#include<sys/resource.h>
#include<sys/wait.h>
pid_t wait3(int *status,int options,struct rusage *rusage);
pid_t wait4(pid_t pid,int *status,int options,struct rusage *rusage);
- 进程等待
- 等待进程
- 进程等待
- 进程等待
- 等待进程
- 进程等待
- 进程等待
- 等待进程终止WaitForSingleObject()
- 等待子进程结束
- 等待CreateProcess进程退出
- 等待子进程
- Linux 进程等待队列
- Linux进程等待
- 等待进程结束
- 进程(等待队列)
- 进程等待与终止
- Linux之进程等待
- 进程等待&程序替换
- PL/SQL Developer在64位操作系统上通过instantclient连接到oracle数据库
- Swift 初体验之三(终结篇),实现登陆注册
- 数据结构与算法系列----二叉排序树
- 【Memcached】集群搭建——memcached内存管理机制
- 结合遗传和蚁群算法的图像边缘特征提取
- 进程等待
- 工具(1):使用lua生成vs2015的工程文件/将已有的C++文件生成vs2015工程文件
- IOS 开发 之 沙盒机制
- JAVA环境变量设置
- Codeforces 527C 线段树 /set
- PAT (Advanced Level) Practise 1020 Tree Traversals (25)
- IOS 开发 之 NSFileManager
- 函数对象
- 占座