如果您从子进程fork()和exec(),并在父进程中等待,父进程如何从子进程获取返回代码?
问题描述:
我正在学习fork()
,exec()
等,我遇到了一些我不完全了解的教科书。如果您从子进程fork()和exec(),并在父进程中等待,父进程如何从子进程获取返回代码?
在该示例中,一个进程调用fork()
。
在子进程中,我们调用exec()
。我们称之为wait()
。
这是我的理解,成功exec()
调用永不返回。如果我们在孩子中调用exec()
,如果孩子不会从exec()
返回给孩子,我们如何等待孩子返回父母?
我在这里唯一的猜测是,发生了什么事是父母,认为它正在等待孩子,实际上是等待用exec创建的新进程?即通常我会fork()
并等待孩子。如果我fork()
和执行UNIX程序date
然后等待在父母的孩子,我实际上现在正在等待date
退出?
谢谢!
答
您需要从程序中区分进程。拨打exec
将在同一个过程中运行不同的程序。 exec
函数不会返回(除了发出错误信号),因为它终止了调用的程序。但是,该过程被重用来运行不同的程序。在某种程度上,从运行exec
的进程的角度来看,exec
函数返回作为新程序的入口点。
从父母的角度来看,有一个子进程。这是所有的父母知道的。父母不知道该孩子称为exec
,除非它观察到并通过间接方式发现,如运行ps
。父母只是在等待子进程退出,而不管子进程正在运行的是什么程序。
这很有道理,谢谢! – Gemini