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支持父进程的非阻塞