僵尸进程会很大程度上加速我们资源的泄漏,非常不好,所以也有一系列解决办法。
链接: 僵尸进程.
一般情况下我们利用2个提供的库函数来实现进程等待。
wait函数
pid_t wait (int* status);
详细解读:
1 .pid_t就是一种有符号整形,用来记录进程的pid的,函数的返回值有三种1.(负1)-1->运行错误。2.0->没有子进程退出。3.返回退出的子进程pid。
2 . status是一种输出型参数,有操作系统给出,记录子进程退出的状态信息。当这个参数为NULL,表示父进程不关心子进程的退出状态。
waitpid函数
pid_t waitpid(pid_t pid,int *status,int options);
解读:
1.返回值和wait相同。
2.第一个参数时用来指定子进程的pid的,若为-1,表示任意一个子进程的退出。
3.输出型参数和wait作用相同。
4.options=0:阻塞等待
options=WNOHANG:非阻塞状态
注意:只有非阻塞状态status才能返回0;(阻塞状态会一直等子进程的退出,哪怕没有也会等)
模拟实现进程等待:
利用waitpid实现:
waitpid(-1,&status,0)
==wait(&status)
这两种写法是等价的
程序运行结果: