c-如何让我的父级等待,直到中间父级的中间父级、子级和子级使用fork、wait和waitpid完成该过程

  • 本文关键字:中间 wait fork waitpid 过程 等待 c fork wait waitpid
  • 更新时间 :
  • 英文 :


我正在使用C中的fork((创建一个父进程,而不是一个中间进程和另一个子进程,以及中间进程的子进程。。,。。但是一些子进程已经完成,因此在使用system((运行ps时不会打印它。我如何使用wait和waitpid((,这样我的父母就会等到孩子完成它的过程。

当前O/p:

UID PID PPID C STIME TTY时间CMD

pc 24400 306 0 15:48 pts/2 00:00:00/

pc 24401 24400 0 15:48 pts/2 00:00:00[a]

pc 24404 24400 0 15:48 pts/2 00:00:00 sh-c ps-f-ppid 306244002440124402

预期O/p:

UID PID PPID C STIME TTY时间CMD

pc 24400 306 0 15:48 pts/2 00:00:00/

pc 24401 24400 0 15:48 pts/2 00:00:00/

pc 24402 24400 0 15:48 pts/2 00:00:00/

pc 24403 24401 0 15:48 pts/2 00:00:00/

pc 24404 24400 0 15:48 pts/2 00:00:00 sh-c ps-f-ppid 306244002440124402。

提前感谢!

我如何使用wait和waitpid((,这样我的父母就会等到孩子完成它的过程。

如果中间进程在终止自身之前等待其子进程终止,那么初始进程只需要等待其每个子进程。

但是,进程只能成功地为其自己的子进程wait(),而不能为子进程,因此,如果中间进程不等待其子进程,则wait()-家族函数不会提供任何机制,初始进程可以通过该机制暂停执行,直到其孙进程终止。对于这种情况,你需要其他东西,或者对中间过程在收集其子进程之前死亡的可能性有弹性。

一个相对简单的";其他的东西";初始进程将创建一个管道,然后启动其子进程,然后关闭管道的写入端,并尝试从读取端读取。孩子们不需要做任何事情,除了在终止之前避免关闭或写入管道的写入端——他们甚至不需要意识到管道。只要任何进程的管道写入端打开,父进程的read()就会阻塞。

最新更新