原文地址: http://blog.163.com/Kissinger _ 1984/blog/static/16899252010425526314 /
wait中的函数原型如下:
#include sys/types.h /*定义交付类型PID _ t */# includesys/wait.hpid _ t wait (int * status ) )进程调用wait后不久
参数status用于保存收集的进程结束时的状态。 这是指向int类型的指针。 但是,如果我们不关心这个子进程是如何死的,而只想关掉这个僵尸进程,可以将此参数设置为NULL,如下所示:
PID=wait (空; 如果成功,则wait返回收集的子进程的进程ID;如果调用进程没有子进程,则调用失败,wait返回-1,errno设置为ECHILD。
如果参数status的值不是NULL,wait将检索子进程结束时的状态并将其存储在其中。 这是一个整数值[int],指示子进程是成功终止还是不成功终止,后面将说明一个进程可以由另一个进程以信号形式终止。 )和成功结束时的返回值,或者以哪个信号结束等信息。 因为这些信息存储在整数不同的二进制位中,所以用常规方法读取非常麻烦。 人们为了进行这项工作设计了特别的宏(macro )。 看看其中最常见的两个。
1,名为wifexited(status )的宏指示子进程是否成功结束,如果已结束,则返回非零值。
虽然名称相同,但请注意,此处的参数status与指向作为wait唯一参数的整数的指针status不同,而是指针指向的整数。 请注意不要混淆。 )
2,如果wexit(5status(status ) WIFEXITED返回非零值,则可以使用此宏提取子进程的返回值。 当子进程调用exit ) 5并退出时,wexitstatus (状态)返回5。 当子进程调用exit(7)时,wexitstatus返回7。 请注意,如果进程未成功结束,即WIFEXITED返回0,则此值没有意义。
当然,处理进程结束状态的宏不仅仅是这两个,但其中大部分在平时的编程中很少使用。