linux 进程回收时间,linux环境编程-wait(僵尸进程回收)

linux环境编程-wait(僵尸进程回收)

linux环境编程-wait(僵尸进程回收)

前面我们介绍了什么是僵尸进程,今天我们来看看 怎么回收 进程残留的PCB

还是老规矩  看看视频 了解一下

求关注

#include

#include

pid_t wait (int * status);

wait

()会暂时停止目前进程的执行,直到有信号来到或子进程结 束。如果在调用 wait

()时子进程已经结束,则

wait

()会立即返 回子进程结束状态值。子进程的结束状态值会由参数 status

返回, 而子进程的进程识别码也会一快返回。如果不在意结束状态值,则 参数 status

可以设成

NULL

。子进程的结束状态值请参考

waitpid

()。 如果执行成功则

返回子进程识别码(PID)

,如果有错误发生则返回 -1。失败原因存于

errno

中。

总结说说这个函数 的三个功能把

父进程 调用它 就 阻塞等待 子进程 结束

回收子进程残留的 资源

获取子进程结束的状态

看看一些判断返回状态的宏【我用有道翻译成中文了,方便大家了解】

86453dff56f33a45da3e30212d0d0d54.png

1.WIFEXITED (stat_val)

如果为正常终止的子进程返回状态,则计算为非零值。

2.WEXITSTATUS (stat_val)

如果WIFEXITED(stat_val)的值非零,那么这个宏将计算为status参数的8位低阶值

子进程传递给_exit()或exit()的值,或者子进程从main()返回的值。

3.WIFSIGNALED (stat_val)

如果由于接收到信号而终止的子进程返回状态,则计算为非零值

未捕获(参见)。

4.WTERMSIG (stat_val)

如果wifsignal (stat_val)的值为非零,该宏将计算导致ter‐的信号的数量

子进程的最小值。

5.WIFSTOPPED (stat_val)

如果为当前停止的子进程返回状态,则计算为非零值。

6.WSTOPSIG (stat_val)

如果WIFSTOPPED(stat_val)的值非零,那么这个宏将计算产生子元素的信号的数量

过程停止。

7.WIFCONTINUED (stat_val)

如果从作业控制停止后继续的子进程返回状态,则计算为非零值。

代码Demo

#include

#include

#include

using namespace std;

int

main(int argc, char*argv[])

{

pid_t pid, wpid;

pid = fork();

if(pid == 0){

cout << "hello world!" << endl;

sleep(60);

}else if(pid > 0){

printf("I am parent, ID: %u\n", getpid());

int status;

printf("wait son die....\n");

if((wpid = wait(&status)) == -1){// block wait son progress die

perror("wait error");

exit(1);// clear the PCB of son

}// get reason about son's die

if(WIFEXITED(status)!=0 && WIFSIGNALED(status)==0){

printf("son progress normal exit\n");

printf("son progress exit status : %d \n", WEXITSTATUS(status));

}else{// 0

printf("son expretion exit,signal ID:%d \n", WTERMSIG(status));

}

printf("I am parent, ID: %u, wait son ID: %u \n", getpid(), wpid);

}else{

perror("fork error");

exit(1);

}

return 0;

}

效果:

f15d81c072cc1b43196d97f9f3480c7c.png

linux环境编程-wait(僵尸进程回收)相关教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值