1进程等待,fork创建的进程使子进程优先运行,
2.方法:
wait
waitpid
3演示代码如下
#include<stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
int main(void)
{
pid_t child;
if((child=fork())==-1)
{
printf(" fork error :%d \n",strerror(errno));
exit(1);
}else if(0==child)//child 进程
{
printf("====child===start===\n");
sleep(3);
printf("*****child:%d**********\n",getpid());
exit(0);
}else
{
printf("====father===start===\n");
wait(NULL);//等待子进程结束
// waitpid(-1, NULL, 0);
printf("*****father:%d**********\n",getpid());
exit(0);
}
}
4演示结果
test@ubuntu:~/test$ gcc -o wp wait_waitpid.c
test@ubuntu:~/test$ ./wp
====father===start===
====child===start===
*****child:15728**********
*****father:15727**********
test@ubuntu:~/test$
5waitpid相关知识点
waitpid相关知识点
#include <sys/types.h>
#include <sys/wait.h>
pid_t waitpid(pid_t pid,int *status,int options);
pid<-1 等待进程组号为pid绝对值的任何子进程。
pid=-1 等待任何子进程,此时的waitpid()函数就退化成了普通的wait()函数。
pid=0 等待进程组号与目前进程相同的任何子进程,也就是说任何和调用waitpid()函数的进程在同一个进程组的进程。
pid>0 等待进程号为pid的子进程。
WIFEXITED(status) 如果子进程正常结束,它就返回真;否则返回假。
WEXITSTATUS(status) 如果WIFEXITED(status)为真,则可以用该宏取得子进程exit()返回的结束代码。
WIFSIGNALED(status) 如果子进程因为一个未捕获的信号而终止,它就返回真;否则返回假。
WTERMSIG(status) 如果WIFSIGNALED(status)为真,则可以用该宏获得导致子进程终止的信号代码。
WIFSTOPPED(status) 如果当前子进程被暂停了,则返回真;否则返回假。
WSTOPSIG(status) 如果WIFSTOPPED(status)为真,则可以使用该宏获得导致子进程暂停的信号代码。
参数options提供了一些另外的选项来控制waitpid()函数的行为。如果不想使用这些选项,则可以把这个参数设为0。
主要使用的有以下两个选项:
参数 说明
WNOHANG 如果pid指定的子进程没有结束,则waitpid()函数立即返回0,而不是阻塞在这个函数上等待;如果结束了,则返回该子进程的进程号。
WUNTRACED 如果子进程进入暂停状态,则马上返回。
网友评论