`
king_tt
  • 浏览: 2107272 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux多任务编程(五)---wait()、waitpid()函数及其基础实验

阅读更多

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文件点此下载

分享到:
评论

相关推荐

    linux多任务编程wait()函数基础实验

    linux多任务编程wait()函数基础实验,下载下来直接编译就可以了

    Linux进程控制编程-waitpid函数实例.pdf

    Linux进程控制编程-waitpid函数实例.pdf 学习资料 复习资料 教学资源

    深入浅出---unix多进程编程之wait()和waitpid()函数

    现在要知道调用wait或waitpid的进程可能会发生什么情况:如果进程由于接收到SIGCHLD信号而调用wait,则可期望wait会立即返回。但是如果在任意时刻调用wait则进程可能会阻塞。两个函数原型#include<sys>pid_twait(int...

    深入探讨:unix多进程编程之wait()与waitpid()函数

    本篇文章是对unix多进程编程中的wait函数与waitpid函数的使用进行了详细的分析介绍,需要的朋友参考下

    详解C语言中的wait()函数和waitpid()函数

    C语言wait()函数:结束(中断)进程函数(常用) 头文件: #include <sys> #include 定义函数: pid_t wait (int * status); 函数说明:wait()会暂时停止目前进程的执行, 直到有信号来到或子进程结束. 如果在调用...

    linuxwait与waitpid函数的深入分析[参考].pdf

    linuxwait与waitpid函数的深入分析[参考].pdf

    操作系统实验五-进程间通信-管道通信

    操作系统实验五 进程间通信——管道通信 无名管道 有名管道 write()和read() pipe() 函数int pipe(int fd[2])创建一个管道 lockf()函数使用管道通信时,可关闭某些不需要的读或写描述符wait()、waitpid(),sys/wait....

    UNIX环境高级编程_第2版.part2

    8.6 wait和waitpid函数179 8.7 waitid函数183 8.8 wait3和wait4函数184 8.9 竞争条件185 8.10 exec函数188 2 目录 8.11 更改用户id和组id 192 8.12 解释器文件196 8.13 system函数200 8.14 进程会计203 ...

    waitpid和wait

    从本质上讲,系统调用waitpid和wait的作用是完全相同的,但waitpid多出了两个可由用户控制的参数pid和options,从而为我们编程提供了另一种更灵活的方式。下面我们就来详细介绍一下这两个参数

    UNIX环境高级编程_第2版.part1

    8.6 wait和waitpid函数179 8.7 waitid函数183 8.8 wait3和wait4函数184 8.9 竞争条件185 8.10 exec函数188 2 目录 8.11 更改用户id和组id 192 8.12 解释器文件196 8.13 system函数200 8.14 进程会计203 ...

    【Linux】进程二 (PCB & fork/vfork & wait/waitpid & exit/_exit & exec函数族 & 环境变量)

    一、描述进程——PCB ·进程信息被放在一个叫做进程控制块的数据结构中,...·状态:任务状态,退出代码,退出信号 ·优先级:相对于其他进程的优先级 ·程序计数器:程序中即将被执行的下一条指令的地址 ·内存指针

    UNIX环境高级编程

    8.6 wait和waitpid函数 148 8.7 wait3和wait4函数 152 8.8 竞态条件 153 8.9 exec函数 156 8.10 更改用户ID和组ID 160 8.10.1 setreuid 和setregid函数 162 8.10.2 seteuid和 setegid函数 163 8.10.3 组ID 163 8.11 ...

    中文第一版-UNIX环境高级编程

    8.6 wait和waitpid函数 148 8.7 wait3和wait4函数 152 8.8 竞态条件 153 8.9 exec函数 156 8.10 更改用户ID和组ID 160 8.10.1 setreuid 和setregid函数 162 8.10.2 seteuid和 setegid函数 163 8.10.3 组ID 163 8.11 ...

    linux系统编程之线程.zip

    失败:错误号 -----Linux环境下,所有线程特点,失败均直接返回错误号。 参数: pthread_t:当前Linux中可理解为:typedef unsigned long int pthread_t; 参数1:传出参数,保存系统为我们分配好的线程ID 参数2...

    UNIX环境高级编程_第二版中文

    8.6 wait和waitpid函数  8.7 waitid函数  8.8 wait3和wait4函数  8.9 竞争条件  8.10 exec函数  8.11 更改用户ID和组ID  8.12 解释器文件  8.13 system函数  8.14 进程会计  8.15 用户标识  ...

    unix环境编程电子书

    164 7.12 小结 168 习题 168 第8章 进程控制 171 8.1 引言 171 8.2 进程标识符 171 8.3 fork函数 172 8.4 vfork函数 176 8.5 exit函数 178 8.6 wait和waitpid函数 179 8.7 waitid函数 183 8.8 ...

Global site tag (gtag.js) - Google Analytics