专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C++初阶 算法
欢迎大家点赞,评论,收藏。
一起努力,一起奔赴大厂
目录
1.2如何等待(wait/waitpid)(等待是必须的,子进程的退出状态是不必须的)
1.2.3waipid函数宏获取退出信息WEXITSTATUS(status) WIFWEXITED(status)
一.进程等待
1.1进程等待引入
在一般情况下,父进程需要等待子进程,进程退出时,父进程不管不顾会造成子进程进入僵尸状态。 进程等待有什么作用呢?父进程通过进程等待,解决子进程僵尸问题,一旦子进程进入僵尸状态kill-9也不能将它回收,因此父进程等待可以回收资源,进程等待也可以获取子进程的退出信息,知道子进程是怎样退出的。
1.2如何等待(wait/waitpid)(等待是必须的,子进程的退出状态是不必须的)
1.2.1wait函数
我们先看下面代码
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
#include<stdlib.h>
void RunChild()
{
int cut=5;
while(cut--)
{
printf("I am child ,pid=%d,ppid=%d\n",getpid(),getppid());
sleep(1);
}
}
int main()
{
printf("I am father ,pid=%d,ppid=%d\n",getpid(),getppid());
pid_t id=fork();
if(id==0)
{
RunChild();
printf("child quit...\n");
exit(0);
}
pid_t rid=wait(NULL);
if(rid>0)
{
printf("wait success,rid=%d\n",rid);
}
}
我们运行后可以看到
先执行程序,进入子进程和父进程同时运行,父进程先等待子进程,子进程运行,运行完后rid返回子进程的pid,然后再继续运行父进程。当我们再父进程开始时sleep(10),可以看到子进程进入僵尸状态
1.2.2waitpid函数位操作获取退出信息
我们先看waitpid函数的参数<