linux里面的父进程等待子进程问题..

linux里面的父进程等待子进程问题..,第1张

进程执行到wait的时候,会阻塞等待子进程的结束,一个wait函数只调用一次,如果只有一个wait,其他的子进程在父进程结束后会成为孤儿进程init进程收养。采用不阻塞方式调用waitpid的话,父进程不会等待,没执行完的子进程将会成为孤儿进程

linux中的wait函数等到一个子进程退出就会返回,恢复到执行状态。要想等所有子进程退出可以用waitpid函数

pid_t wait(pid_t pid,int * status,int options)

pid>0时,只等待pid与该参数相同的子进程,如果该子进程一直没有退出,那么父进程会一直阻塞;

pid=0时,会等待同一个进程组的子进程,若子进程加入了其他进程组,waitpid()不再关心它的状态;

pid=-1时,waitpid()与wait()函数相同,将阻塞等待并回收一个子进程;

pid<-1时,会等待指定进程组的任何子进程,进程组的id等于pid的绝对值;

这是进程间同步的问题。解决方法是:fork一个子进程执行system调用,父进程调用 wait 或 waitpid 等待子进程的终止信息。

父进程调用 wait 或 waitpid 时可能会:

• 阻塞(如果它的所有子进程都还在运行)。

• 带子进程的终止信息立即返回(如果一个子进程已终止,正等待父进程读取其终止信息)。

• 出错立即返回(如果它没有任何子进程)。

wait 和 waitpid 这两个函数的区别是:

• 如果父进程的所有子进程都还在运行,调用wait将使父进程阻塞,而调用waitpid时如果在options参数中指定WNOHANG可以使父进程不阻塞而立即返回0。

• wait等待第一个终止的子进程,而waitpid可以通过pid参数指定等待哪一个子进程。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8494017.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存