0
系統調用fork()
會爲地址空間創建兩個完全相同的副本,一個用於父項,另一個用於子項。在fork中檢測子進程創建()
在使用if語句使用fork時,在下面的代碼中將創建子進程多少次?
fork();
pid=fork();
if(pid==0)
{
fork();
}
系統調用fork()
會爲地址空間創建兩個完全相同的副本,一個用於父項,另一個用於子項。在fork中檢測子進程創建()
在使用if語句使用fork時,在下面的代碼中將創建子進程多少次?
fork();
pid=fork();
if(pid==0)
{
fork();
}
添加一些額外的代碼來獲得這樣的:
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid = fork();
if (pid != 0) printf("%d\n", pid);
pid = fork();
if (pid != 0) printf("%d\n", pid);
if(pid==0)
{
pid = fork();
if (pid != 0) printf("%d\n", pid);
}
return 0;
}
然後編譯,執行,檢查其輸出:5子進程的ID。
五次。你需要進一步的解釋嗎? – Beta
「使兩個相同的地址空間副本」 - 不,它不。它使一個已經存在的地址空間完全相同。在大多數現代實現中,它甚至沒有這樣做 - 它只是創建一個新的地址空間,它引用與原始頁面相同的所有頁面,但將它們標記爲寫入時複製。 – twalberg