2016-02-29 100 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