waitpid()的示例正在使用中?

我知道waitpid()用于等待进程完成,但是如何才能完全使用它?

在这里我想要做的是,创造两个孩子并等待第一个孩子完成,然后在退出前杀死第二个孩子。

 //Create two children pid_t child1; pid_t child2; child1 = fork(); //wait for child1 to finish, then kill child2 waitpid() ... child1 { kill(child2) } 

waitpid()语法:

 pid_t waitpid(pid_t pid, int *status, int options); 

pid的值可以是:

  • <-1 :等待进程组ID等于pid绝对值的任何子进程。
  • -1 :等待任何子进程。
  • 0 :等待进程组ID等于调用进程ID的任何子进程。
  • > 0 :等待进程ID等于pid值的子进程。

options的值是以下常量中零或更多的OR:

  • WNOHANG :如果没有孩子退出,立即返回。
  • WUNTRACED :如果孩子已经停止, WUNTRACED返回。 即使未指定此选项,也会提供已停止的已跟踪子项的状态。
  • WCONTINUED :如果通过交付SIGCONT恢复了已停止的孩子, WCONTINUED返回。

要获得更多帮助,请使用man waitpid

语法是

 pid_t waitpid(pid_t pid, int *statusPtr, int options); 

1. pid是孩子应该等待的过程。

2.statusPtr是指向要存储终止进程的状态信息的位置的指针。

3.指定waitpid函数的可选操作。 可以指定以下任一选项标志,也可以将它们与按位包含的OR运算符组合使用:

WNOHANG WUNTRACED WCONTINUED

如果成功,则waitpid返回已报告其状态的已终止进程的进程ID。 如果不成功,则返回-1。

好在等待

1.Waitpid可以在你拥有多个子进程时使用,并且你想等待特定的子进程在父进程恢复之前完成执行

2.waitpid支持工作控制

3.it支持父进程的非阻塞