调用wait或waitpid有三种不同的情况发生:
创新互联专注于永春企业网站建设,成都响应式网站建设公司,商城开发。永春网站建设公司,为永春等地区提供建站服务。全流程按需求定制网站,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
1、如果其所有子进程都还在运行,则阻塞
2、如果一个子进程终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回
3、如果它没有任何子进程,则立即出错返回 如果进程由于接收到SIGCHLD信号而调用wait,则可期望wait会立即返回,但是如果在任意时刻调用wait,则进程可能会阻塞。
在一个子进程终止前,wait使其调用者阻塞,而waitpid有一个选项,可使调用者不阻塞。waitpid并不等待在其调用之后的第一个终止子进程,他有若干选项,可以控制他所等待的进程。waitpid函数提供wait函数没有提供的三个功能: 1、waitpid可等待一个特定的进程,而wait则返回任一终止子进程的状态 2、waitpid提供了一个wait的非阻塞版本 3、waitpid支持作业控制ps是一个 Linux 命令,显示有关系统上当前正在运行的进程的信息。
一些常见的选项ps是:
-aux:以面向用户的进程状态格式显示所有用户的所有进程的信息。
-ef或-e:以比默认格式提供更多信息的格式显示有关所有进程的信息。
-u USER:仅显示有关以指定用户身份运行的进程的信息。
请注意,ps命令的选项和输出可能因类 Unix 操作系统而异。查阅手册页 ( man ps) 以获取更多信息和用法示例始终是个好主意。
僵尸进程的产生:
当一个进程创建了一个子进程时,他们的运行时异步的。即父进程无法预知子进程会在什么时候结束,那么如果父进程很繁忙来不及wait 子进程时,那么当子进程结束时,会不会丢失子进程的结束时的状态信息呢?处于这种考虑unix提供了一种机制可以保证只要父进程想知道子进程结束时的信息,它就可以得到。
这种机制是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存。但是仍然保留了一些信息(如进程号pid 退出状态 运行时间等)。这些保留的信息直到进程通过调用wait/waitpid时才会释放。这样就导致了一个问题,如果没有调用wait/waitpid的话,那么保留的信息就不会释放。比如进程号就会被一直占用了。但系统所能使用的进程号的有限的,如果产生大量的僵尸进程,将导致系统没有可用的进程号而导致系统不能创建进程。所以我们应该避免僵尸进程
这里有一个需要注意的地方。如果子进程先结束而父进程后结束,即子进程结束后,父进程还在继续运行但是并未调用wait/waitpid那子进程就会成为僵尸进程。
到此,以上就是小编对于linux waitpid函数的问题就介绍到这了,希望这3点解答对大家有用。
分享文章:进程间通信中wait函数有什么作用?(Linux下waitpid函数怎么使用)
网页地址:http://www.shufengxianlan.com/qtweb/news11/530111.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联