首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >waitpid()参数

waitpid()参数
EN

Stack Overflow用户
提问于 2014-02-28 18:09:46
回答 3查看 16K关注 0票数 5

我有一个关于waitpid参数的问题。我应该在p完成的时候启动p1

下面是启动p0的内容:

代码语言:javascript
复制
if(p[0] == 0){
    process(0,1); //(process, duration(time))
    return 0;
}

现在,我希望p1在p0结束时立即启动(在1秒之后)

代码语言:javascript
复制
if(p[1] == 0){
    process(1,2);
    return 0;
}
waitpid(p[0], NULL, 0);

我的问题是: waitpid中的参数是什么意思?最后一个参数是否应该设置为1,因为p在1秒后结束,而这正是我想要启动p1的时候?

EN

回答 3

Stack Overflow用户

发布于 2014-02-28 18:26:26

waitpid中的参数是什么意思?

您可以查阅waitpid(3)手册,了解其参数的含义。

在你的情况下,

代码语言:javascript
复制
waitpid(p[0], NULL, 0);

手段

  • p[0]:等待p[0]
  • NULL:上的pid保持不关心status
  • 0:无标志

最后一个参数是否应该设置为1,因为p在1秒后结束,而这正是我想要p1启动的时间?

为了实现您的目标,在进程0结束时立即启动进程1,您应该将waitpid(...);语句放在用于创建进程1的fork()之前,并在调用waitpid()时使用正确的参数。

票数 4
EN

Stack Overflow用户

发布于 2014-02-28 18:41:39

完整文档在手册页或此处:http://linux.die.net/man/2/waitpid

基本上你有3个参数:

代码语言:javascript
复制
pid_t waitpid(pid_t pid, int *status, int options);

pid就是您正在等待的进程。除非您正在等待多个子进程(在这种情况下,在手册页中指定0、-1或一个小于-1 - pid的数字),否则请在此处指定进程的详细信息。

status是一个指向将用退出状态填充的整数的指针。这是进程的退出状态和它如何退出(或没有退出)的描述的组合。手册页提供了一些宏,您可以使用这些宏来理解这一点。

可以用多个标志来填充options,这些标志or在一起。其中最有用的是名称有些奇怪的W_NOHANG,它让waitpid简单地告诉您进程是否已经完成(如果已经完成,它的退出状态是什么),而不是等待它完成。

票数 2
EN

Stack Overflow用户

发布于 2014-02-28 18:18:58

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

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

例如

代码语言:javascript
复制
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
     }
 }

关于waitpid中的to参数,没有如下说明

第一个参数: pid_t pid

它是等待进程退出的进程的pid

状态第二个参数: int *

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

第三个参数: int选项

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22092088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档