2016-02-29 110 views
1

我正在学习fork(),exec()等,我遇到了一些我不完全了解的教科书。如果您从子进程fork()和exec(),并在父进程中等待,父进程如何从子进程获取返回代码?

在该示例中,一个进程调用fork()

在子进程中,我们调用exec()。我们称之为wait()

这是我的理解,成功exec()调用永不返回。如果我们在孩子中调用exec(),如果孩子不会从exec()返回给孩子,我们如何等待孩子返回父母?

我在这里唯一的猜测是,发生了什么事是父母,认为它正在等待孩子,实际上是等待用exec创建的新进程?即通常我会fork()并等待孩子。如果我fork()和执行UNIX程序date然后等待在父母的孩子,我实际上现在正在等待date退出?

谢谢!

回答

1

您需要从程序中区分进程。拨打exec将在同一个过程中运行不同的程序。 exec函数不会返回(除了发出错误信号),因为它终止了调用的程序。但是,该过程被重用来运行不同的程序。在某种程度上,从运行exec的进程的角度来看,exec函数返回作为新程序的入口点。

从父母的角度来看,有一个子进程。这是所有的父母知道的。父母不知道该孩子称为exec,除非它观察到并通过间接方式发现,如运行ps。父母只是在等待子进程退出,而不管子进程正在运行的是什么程序。

+0

这很有道理,谢谢! – Gemini