我是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
类型的信息?
答案 0 :(得分:3)
您需要加入<sys/wait.h>
并定义_XOPEN_SOURCE
,as documented in the manual。
WIFSIGNALED
宏必须与从wait
,waitpid
或waitid
获得的整数状态一起使用。对于waitpid
,状态可用作si_status
结构的siginfo_t
成员。换句话说,您可以使用WIFSIGNALED(info.si_status)
,info
作为siginfo_t
类型的结构,您之前传递给waitid()
的地址。