waitpid() 参数

The*_*ude 5 c linux process

我有一个关于 waitpid 参数的问题。当 p[0] 完成时,我应该启动 p[1](进程 1)。

这就是 p0 的开头:

if(p[0] == 0){
    process(0,1); //(process, duration(time))
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我希望 p1 在 p0 结束时立即开始(1 秒后)

if(p[1] == 0){
    process(1,2);
    return 0;
}
waitpid(p[0], NULL, 0);
Run Code Online (Sandbox Code Playgroud)

这是我的问题:waitpid 中的参数是什么意思?应该将最后一个参数设置为 1,因为 p[0] 在 1 秒后结束,这是我希望 p[1] 开始的时间吗?

Jay*_*hoi 1

它通常用于根据进程 ID(也称为 a )等待特定进程完成(或者如果您使用特殊标志则更改状态)pid

它还可用于等待一组子进程中的任何一个,无论是来自特定进程组的子进程还是当前进程的任何子进程。

例如

pid_t child_pid;
int status;

child_pid = fork();

if (child_pid == 0) {
     // in child; do stuff including perhaps exec
} else if (child_pid == -1) {
     // failed to fork 
} else {
     if (waitpid(child_pid, &status, 0) == child_pid) {
          // child exited or interrupted; now you can do something with status
     } else {
          // error etc
     }
 }
Run Code Online (Sandbox Code Playgroud)

不涉及参数inwaitpid如下

第一个参数:pid_t pid

这是您等待进程退出的进程的 pid

第二个参数:int *status

它是程序的当前状态,您可以使用宏来测试每个条件,例如 WIFEXITED 、 WIFSIGNALED

第三个参数:int 选项

options 参数应该为 0。您不需要实现任何选项。(但是,您的系统应该检查以确保不会请求您不支持的选项。)