wait()和waitpid()
来源:互联网 发布:windows.old有用吗 编辑:程序博客网 时间:2024/05/22 03:22
功能描述: 等待进程改变其状态。所有下面哪些调用都被用于等待子进程状态的改变,获取状态已改变的子进程信息。状态改变可被认为是:1.子进程已终止。2.信号导致子进程停止执行。3.信号恢复子进程的执行。在子进程终止的情况下,wait调用将允许系统释放与子进程关联的资源。如果不执行wait,终止了的子进程会停留在"zombie"状态。 如果发现子进程改变了状态,这些调用会立即返回。反之,调用会被阻塞直到子进程状态改变,或者由信号处理句柄所中断(假如系统调用没有通过sigaction的SA_RESTART标志重启动)。 wait系统调用挂起当前执行中的进程,直到它的一个子进程终止。waitpid挂起当前进程的执行,直到指定的子进程状态发生变化。默认,waitpid只等待终止状态的子进程,但这种行为可通过选项来改变。waitid系统调用对于等待哪个子进程状态改变提供了更精确的控制。 子进程已终止,父进程尚未对其执行wait操作,子进程会转入“僵死”状态。内核为“僵死”状态的进程保留最少的信息量(进程标识,终止状态,资源使用信息),过后父进程执行wait时可以获取子进程信息。只要僵死的进程不通过wait从系统中移去,它将会占据内核进程表中的一个栏位。如果进程表被填满,内核将不能再产生新进程。如果父进程已终止,它的僵死子进程将由init进程收养,并自动执行wait将它们移去。
当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号。父进程可以忽略该信号,或调用信号处理函数。调用wait或waitpid的进程,会发生以下情况:
1). 如果其所有子进程都在运行,则该进程阻塞
2). 如果一个子进程已经终止,正等待父进程获取其终止状态,则取得该进程的终止状态立即返回
3). 如果它没有任何子进程,则立即出错返回。
#include <sys/wait.h>
#pid_t wait (int * statloc);
#pid_t waitpid (pid_t pid, int * statloc, int optins);
wait和waitpid函数区别
1). 在一个子进程终止前,wait使其调用者阻塞,而waitpid有一个选项,可使调用者不阻塞。
2). waitpid并不等待在其调用之后的第一个终止子进程,它有若干个选项,可以控制它所等到的进程。
3). 对于wait,其唯一的出错是调用进程没有子进程;对于waitpid,假如指定的进程或进程组不存在,或者参数pid指定的进程不是调用进程的子进程都可能出错。
4). Waitpid提供了wait没有的三个功能:一是waitpid可等待一个特定的进程;二是waitpid提供了一个waitpid的非阻塞版本;三是waitpid支持作业控制。
依据传统,这两个函数返回的整型状态字是由实现定义的。其中某些位表示退出状态(正常返回),其它位表示信号编号(异常返回)。下面有四个互斥的宏。
WIFEXITED(status)
若为正常终止子进程返回的状态,则为真。对于这种情况可以执行WEXITSTATUS(status),取子进程传送给exit、_exit或_Exit参数的低8位。
WIFSIGNALED(status)
若为异常终止子进程返回的状态,则为真(接到一个不捕捉的信号)。对于这种情况可以执行WTERMSIG(status),取得子进程终止的信号编号。
WIFSTOPPED(status)
若为当前暂停子进程返回的状态,则为真。对于这种情况可以执行WSTOPSIG(status),取得子进程暂停的信号编号。
WIFCONTINUED(status)
若在作业控制暂停后已经继续的子进程返回的状态,则为真。仅用于waitpid。
对于waitpid函数中的pid参数的作用见下表:
pid == -1 等待任一子进程。
pid > 0 等待其进程ID与pid相等的子进程
pid == 0 等待其组ID等于调用进程组ID的任一的子进程
pid < -1 等待其组ID等于pid绝对值的任一的子进程
对于waitpid函数中的options参数的作用见下表:
WCONTINUED
若实现支持作业控制,那么由pid指定的任一子进程在暂停后已经继续,但是状态没报告,则返回其状态
WNOHANG
若由pid指定的子进程并不是立即可用的,则waitpid不阻塞,此时返回值为0
WUNTRACED
若实现支持作业控制,那么由pid指定的任一子进程已经处于暂停状态并没报告过,则返回其状态
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wzhwho/archive/2009/02/26/3940952.aspx
- wait和waitpid详解
- wait和waitpid
- wait()和waitpid()
- wait 和waitpid函数
- wait和waitpid详解
- wait和waitpid函数
- wait 和 waitpid 差别
- wait和waitpid详解
- wait() 和waitpid() 函数
- wait和waitpid详解
- wait和waitpid
- wait和waitpid详解
- wait和waitpid详解
- wait和waitpid详解
- wait和waitpid详解
- wait 和 waitpid 区别
- wait和waitpid详解
- wait和waitpid详解
- 3D 电视会流行吗?
- 从FxCop归纳出来的一些.net规范建议(转自:http://msdn.microsoft.com/zh-cn/library/ms228593%28v=VS.80%29.aspx)
- xml语法规则
- 快速跳转到Google SSL 中文版的网址:ggssl.com
- 一个很不错的软件
- wait()和waitpid()
- 缺页异常处理程序
- 蓝牙驱动和Profile
- 六个月的嵌入式学习记录
- 处理地址空间以外的错误地址
- datetime
- PHP 删除某个目录下N天前的所有文件
- WebServices的认证处理
- 处理地址空间内的错误地址