Linux多任务编程之五:exit()和_exit()函数(转)
来源:CSDN 作者:王文松 转自:Linux公社
------------------------------------------------------------------------------------------------------------------------------------------------
wait()和waitpid()
函数说明
wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。
waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程(它 可以指定需要等待终止的子进程),它还有若干选项,如可提供一个非阻塞版本的 wait()功能,也能支持作业控制。实际上,wait()函数只是 waitpid()函数的一个特例,在Linux 内部实现 wait()函数时直接调用的就是waitpid()函数。
函数格式
下图为wait()函数的格式
下图为waitpid()函数的格式
基础实验
实验1
本实验中首先使用fork()创建一个子进程,然后让其子进程暂停5s(使用了sleep()函数)。接下来对原有的父进程使用waitpid() 函数,并使用参数WNOHANG是该父进程不会阻塞。若有子进程退出,则waitpid()返回子进程号;若没有子进程退出,则waitpid()返回 0,并且父进程每隔1s循环判断一次。该程序的流程图如下:
程序源代码我上传到网站,可以免费下载waitpid.c文件,点此下载
下载文件后,使用命令:gcc waitpid.c -o waitpid
然后执行命令:./waitpid 结果如下图;
从输出结果就可以看出程序的执行流程。先执行一次父进程,父进程睡眠1s,此时执行子进程,然后子进程睡眠5秒;接着再执行父进程监听。哎哟我去我不分析流程了,怕再说迷糊了。
实验2
本实验使用函数wait(),同实验2一样,也是先用fork()新建一个子进程,然后让子进程暂停5s。接下来对原有的父进程使用wait()函数。不同的是,wait()函数会使得父进程阻塞,通过本实验的结果就可以看出。代码如下:
执行结果如下图
我建议你亲自实验一下,能很明显的看出不同。
wait.c文件下载
免费下载地址在 http://linux.linuxidc.com/
用户名与密码都是www.linuxidc.com
具体下载目录在 /2013年资料/6月/12日/Linux多任务编程
最新文章
- github page
- spring 事务问题
- 人人都是 DBA(II)SQL Server 元数据
- Windows Azure Virtual Machine (33) Azure虚拟机删除重建
- webkit内核浏览器的CSS写法
- java操作mysql中的编码问题解决
- [转]sql利用游标循环,遍历表循环结果集
- 面向对象(class0420)
- websphere性能设置和日常维护
- Devexpress Barmanager设置
- android 分辨率自适应
- bzoj有趣的题目
- OGG-01008 Extract displays Discarding bad record (discard recs=1) when using filter or where clause
- python_format格式化输出、while else、逻辑运算符、编码初识
- 深入理解Java中的IO
- UML入门[转]
- ubuntu14.04后安装win10记录
- 微软BI 之SSAS 系列 - 在SQL Server 2012 中开发 Analysis Services Multidimensional Project
- 如何优雅的退出/关闭/重启gunicorn进程
- 【转】【Centos】nginx配置:location配置方法及实例详解
热门文章
- 五月天的线上演唱会你看了吗?用Python分析网友对这场线上演唱会的看法
- 别在重复造轮子了,几个值得应用到项目中的 Java 开源库送给你
- Python报错:SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
- Shell总结02-shell变量、赋值与替换
- 什么是Galil(加利尔)运动控制卡,它是用来干嘛的呢?galil开发文件dmc32.dll,动态链接库,API
- Java中在数字前自动补零方法
- JavaWeb网上图书商城完整项目-数据库操作工具类2-MapHandle的高级用法
- Zookeeper分布式过程协同技术 - 概念及基础
- 安装Centos 7 并且配置远程登录
- 基于jQuery的打字机函数