我有一个关于waitpid参数的问题。我应该在p完成的时候启动p1。
下面是启动p0的内容:
if(p[0] == 0){
process(0,1); //(process, duration(time))
return 0;
}现在,我希望p1在p0结束时立即启动(在1秒之后)
if(p[1] == 0){
process(1,2);
return 0;
}
waitpid(p[0], NULL, 0);我的问题是: waitpid中的参数是什么意思?最后一个参数是否应该设置为1,因为p在1秒后结束,而这正是我想要启动p1的时候?
发布于 2014-02-28 18:26:26
waitpid中的参数是什么意思?
您可以查阅waitpid(3)手册,了解其参数的含义。
在你的情况下,
waitpid(p[0], NULL, 0);手段
p[0]:等待p[0]NULL:上的pid保持不关心status0:无标志最后一个参数是否应该设置为1,因为p在1秒后结束,而这正是我想要p1启动的时间?
为了实现您的目标,在进程0结束时立即启动进程1,您应该将waitpid(...);语句放在用于创建进程1的fork()之前,并在调用waitpid()时使用正确的参数。
发布于 2014-02-28 18:41:39
完整文档在手册页或此处:http://linux.die.net/man/2/waitpid
基本上你有3个参数:
pid_t waitpid(pid_t pid, int *status, int options);pid就是您正在等待的进程。除非您正在等待多个子进程(在这种情况下,在手册页中指定0、-1或一个小于-1 - pid的数字),否则请在此处指定进程的详细信息。
status是一个指向将用退出状态填充的整数的指针。这是进程的退出状态和它如何退出(或没有退出)的描述的组合。手册页提供了一些宏,您可以使用这些宏来理解这一点。
可以用多个标志来填充options,这些标志or在一起。其中最有用的是名称有些奇怪的W_NOHANG,它让waitpid简单地告诉您进程是否已经完成(如果已经完成,它的退出状态是什么),而不是等待它完成。
发布于 2014-02-28 18:18:58
它通常用于根据进程ID (也称为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
}
}关于waitpid中的to参数,没有如下说明
第一个参数: pid_t pid
它是等待进程退出的进程的pid
状态第二个参数: int *
它是程序的当前状态,您可以使用宏来测试每个条件,如WIFEXITED、WIFSIGNALED
第三个参数: int选项
选项参数应为0。您不需要实现任何选项。(但是,您的系统应进行检查,以确保不请求您不支持的选项。)
https://stackoverflow.com/questions/22092088
复制相似问题