`
king_tt
  • 浏览: 2232185 次
  • 性别: 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()函数基础实验,下载下来直接编译就可以了

    iTOP-4412实验手册

    - **实验分析**:通过实例解释如何通过main函数接收命令行参数,并使用wait和waitpid函数来同步父进程与子进程。 #### 实验20:exec函数族 - **实验目的**:学习如何使用exec系列函数来替换当前进程的执行上下文。 ...

    Linux实验指导书

    - 使用`fork`, `exec`, `wait`, `waitpid`等函数创建和管理子进程。 - 学习信号处理,如`signal`函数的使用。 - 探索进程间通信(IPC)的方式,如管道、消息队列、共享内存等。 3、实验结论: 完成实验后,学生将...

    操作系统实验linux 实验 课程设计

    在Linux中,可以使用fork()创建新进程,使用exec()系列函数加载新的程序,用wait()和waitpid()等待子进程结束,以及用信号处理函数来处理进程间的同步和通信。在Cygwin下,这些函数同样可用,使得Windows用户能在...

    Linux操作系统实验指导书 课题组编写

    - 进程控制:学习wait()、waitpid()、exit()、kill()等函数,实现进程间的同步和信号处理。 #### 实验四:进程通信 **实验目的** 熟悉进程间通信(IPC)的各种方式,如管道(pipe)、命名管道(fifo)、信号量(semaphore...

    linux进程编程ppt

    Linux提供了一系列系统调用来实现进程控制,如fork()用于创建子进程,exec()系列函数用于替换当前进程的执行上下文,wait()和waitpid()用于父进程等待子进程结束,而kill()和signal()则用于进程间的通信和信号处理。...

    UNIX环境高级编程

    - **定义与历史**: UNIX是一种多用户、多任务的操作系统,由AT&T贝尔实验室在20世纪70年代初开发出来。它以其稳定性和可移植性而著称,成为后来许多操作系统(包括Linux和macOS)的基础。 - **主要特性**: - **多...

    Linux编程:普通文件和目录编程、进程实验、命名管道实验、信号实验、域名解析实验、网络服务器和客户机

    进程实验可能涉及创建子进程(`fork()`)、进程间通信(IPC,如使用`pipe()`或`socket()`)以及同步(`wait()`或`waitpid()`)。 命名管道(named pipe)实验会介绍如何创建和使用FIFO(先进先出)管道来实现不同...

    1115039嵌入式系统实验教学大纲.pdf

    《嵌入式系统》实验教学大纲旨在通过一系列实践环节,帮助学生掌握嵌入式系统开发的基础知识和技能,包括Linux开发环境的建立、串口通信、多任务处理、网络通信和简单设备驱动等方面。课程主要面向通信工程专业的...

    UNIX环境高级编程第二版

    - **相似之处**: 两者都采用了类似的命令行界面、文件系统结构以及多用户多任务的特性。 - **差异**: Linux是免费且开源的,拥有庞大的社区支持;而UNIX则是商业化的操作系统,通常用于服务器和大型机领域。 #### 2...

    西安电子科技大学操作系统实验报告

    在这个实验中,父进程创建子进程,子进程负责读取文件,父进程通过`waitpid()`函数等待子进程结束。这个过程展示了进程间的同步机制,确保父进程在子进程完成任务后再继续执行。 实验二:线程共享进程中的数据 实验...

    操作系统完整的实验报告从调试到运行,以及源代码

    在Linux环境下,我们可以使用`waitpid()`或`wait()`函数来等待子进程结束,同时,使用`exit()`或`_exit()`函数可以让一个进程优雅地终止。这些系统调用对于理解和管理进程间的交互至关重要。 在调试过程中,我们将...

    unix程序设计课件

    Unix是一种多用户、多任务的操作系统,它诞生于1960年代末期,由肯·汤普逊(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)在AT&T贝尔实验室开发。Unix以其简洁、高效和可移植性而闻名,它对现代计算机科学产生了...

Global site tag (gtag.js) - Google Analytics