进程等待

1. 进程等待的必要性 子进程退出,父进程如果不管不顾,就可能造成“僵尸进程”的问题,进而造成内存泄露 另外,进程一旦变成僵尸状态,那就刀枪不入,kill -9也无能为力。 最后,父进程派给子进程的任务完成的如何,我们需要知道,如子进程运行完成,结果对还是不对,或者是否正常退出 父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。

2. 进程等待的方法 wait()方法 #include<sys/types.h> #include<sys/wait.h> pid_t wait(int*status); 返回值:成功返回被等待进程pid,失败返回-1。 参数:输出型参数,获取子进程退出状态,若不关心,可以设置为NULL。

3. waitpid方法

pid_t waitpid(pid_t pid,int *status,int options); 返回值:当正常返回时waitpid返回收集到的子进程的进程id,若调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在。

参数: pid: pid=-1,等待任一个子进程,与wait等效。pid>0,等待进程id为pid的进程,即就是等待特定进程。则该参数就是决定等待哪一个进程的参数 status:WIFEXITED(status):若为正常终止子进程返回的状态,则为真。

WEXITSTATUS(status):若WIFEXITED(status),提取子进程退出码。则改参数就是判断子进程的执行状态的一个参数。 options:WNOHANG:若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待,若正常结束,则返回该子进程的ID。该参数默认的行为是挂起调用进程,直到有子进程终止,在等待子进程终止的同时,如果还想做些有用的工作,就使用这个选项。如果设置为WNOHANG就是非阻塞的等待。

 注意:如果子进程已经退出,调用wait/waitpid时,wait/waitpid会立即返回,并且释放资源,获得子进程退出信息。 如果在任意时刻调用wait/waitpid,子进程存在且正常运行,则进程可能阻塞。 如果不存在该子进程则立即出错返回。

说这么多,该函数就是等待子进程返回的一个函数,若子进程在执行,则通过设置options的值,来决定如何等待。

设置为WNOHANG:表示不予以等待,做自己的事情,到子进程终止时,在获得它的pid给父进程。

设置为WUNTRACED或WUNTRACED:表示等待。

4. ps -al :列出当前所有的进程

5. 进程退出码,main函数中return 所返回的数字0或非0。echo $?:打印的是离当前进程最近的退出码。

6. 在程序的任何地方调用exit()都回导致进程退出。

7. 获取子进程status wait与waitpid都有一个status参数,该参数是一个输出型参数,由操作系统填充。 如果传递NULL,表示不关心子进程的退出状态信息。若不为空,操作系统会根据该参数,将子进程的退出信息反馈给父进程。 status不能简单的当作整形来看待,可以当做位图来看待。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值