无法使用waitid()和P_PID进行编译

时间:2014-10-15 10:52:47

标签: c waitpid

我是Linux新手。我正在尝试使用waitid()来等待子进程。 当我尝试使用gcc编译包含以下行的文件时:

id_t cpid = fork();
siginfo_t status;
waitid(P_PID, cpid, &status, WEXITED);

生成了以下错误:

error: ‘P_PID’ undeclared (first use in this function)

我包括以下库:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <string.h> 
#include <time.h> 

我错过了什么吗?

另一个问题是,如何使用WIFSIGNALED()检索siginfo_t类型的信息?

1 个答案:

答案 0 :(得分:3)

您需要加入<sys/wait.h>并定义_XOPEN_SOURCEas documented in the manual

WIFSIGNALED宏必须与从waitwaitpidwaitid获得的整数状态一起使用。对于waitpid,状态可用作si_status结构的siginfo_t成员。换句话说,您可以使用WIFSIGNALED(info.si_status)info作为siginfo_t类型的结构,您之前传递给waitid()的地址。