Linux多任务编程(五)---wait()、waitpid()函数及其基础实验
来源:互联网 发布:心灵想要大声呼喊知乎 编辑:程序博客网 时间:2024/06/06 02:36
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文件点此下载
/************************************************************************************************
*欢迎关注本人公众号:BigBearIT,一起分享交流知识,更多精彩等着你!
*************************************************************************************************/
- Linux多任务编程(五)---wait()、waitpid()函数及其基础实验
- Linux多任务编程(五)---wait()、waitpid()函数及其基础实验
- Linux多任务编程(二)---fork()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(四)---exit()函数及其基础实验
- Linux多任务编程(二)---fork()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(四)---exit()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(二)---fork()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(四)---exit()函数及其基础实验
- 【Linux基础】wait和waitpid函数
- 【Linux编程】wait和waitpid函数
- Linux多任务编程(七)---Linux守护进程及其基础实验
- Linux多任务编程(七)---Linux守护进程及其基础实验
- 十二、Linux系统编程-进程(五)SIGCHLD、wait、waitpid、system
- linux waitpid/wait函数用法
- FB联机调试设备 出现移动设备上进行网络调试时 计算机防火墙上的 7935 端口已打开问题
- UNIX常用函数 - 动态库操作相关函数
- win7 下使用vb开发工具拖动控件时出现控件闪烁问题的解决方法
- JS保存、读取 换行 转Json 报错
- NHiberNate性能问题
- Linux多任务编程(五)---wait()、waitpid()函数及其基础实验
- [Oracle] 数据库安全之 - Vault
- (二)代理模式详解(包含原理详解)
- java.lang.NoClassDefFoundError: org.achartengine.renderer.XYMultipleSeriesRenderer解决办法
- 南派三叔7部全集
- Ruby on Rails(ROR)——提高rails new时bundle install运行速度
- 存储优化
- c++ builder OLE创建Excel表格
- 传统table开发和当前流行的div+css开发模式的比较