因此,我已經使用了fork()
,我知道它的作用。作爲一個初學者,我非常害怕它(但我仍然不完全理解它)。您可以在網上找到的fork()
的一般說明是,它複製當前進程並分配不同的PID,父PID,並且該進程將具有不同的地址空間。但是,所有這些都是好的,但是,考慮到這個功能描述,初學者會想「爲什麼這個功能如此重要......我爲什麼要複製我的過程?」。所以我很想知道,最終我發現,您可以通過execve()
家族從當前流程中調用其他流程。爲什麼fork()以這種方式工作
我仍然不明白的是爲什麼你必須這樣做?最順理成章的事情是有,你可以調用像
create_process("executable_path+name",params..., more params);
這將產生新的進程,並開始在主開始運行它(),並返回新的PID功能。
讓我感到困惑的是fork/execve解決方案正在進行可能不需要的工作。如果我的流程使用大量內存會怎麼樣?內核是否複製我的頁面表等。我相信它沒有真正分配真實的內存,除非我已經觸及它。另外,如果我有線程會發生什麼?在我看來,這太亂了。
幾乎所有fork的描述都說它只是複製進程,新進程在fork()
調用後開始運行。這確實是發生了什麼,但爲什麼會發生這種情況,爲什麼fork/execve是產生新進程的唯一方法,以及從當前創建新進程的最普通unix方式是什麼?有沒有其他更有效的方法來產生過程?**這不需要複製更多的內存。
This同一個問題線程會談,但我發現它不是中規中矩:
謝謝。
請在http://unix.stackexchange.com/或http://superuser.com/ – rlemon
上發帖爲什麼unix?這是一個編程問題,它屬於堆棧溢出。 – Petr
解讀http://cm.bell-labs.com/who/dmr/hist.html – ninjalj