我是 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
类型中检索信息?
最佳答案
您需要包含<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()
.
关于无法使用 waitid() 和 P_PID 进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26380736/