[英]return value in vfork() system call
考慮以下代碼:
int main()
{
int pid;
pid=vfork();
if(pid==0)
printf("child\n");
else
printf("parent\n");
return 0;
}
在vfork()的情況下,父進程和子進程使用的地址空間是相同的,因此應該存在變量pid的單個副本。 現在我無法理解這個pid變量如何具有vfork()返回的兩個值,即,對於子項為零而對於父項為非零?
在fork()的情況下,地址空間也被復制,每個子節點和父節點中都有兩個pid變量副本,所以我可以理解在這種情況下,兩個不同的副本可以有fork()返回的不同值,但是無法理解在vfork()的情況下,pid如何具有vfork()返回的兩個值?
沒有2份。 當你調用vfork
,父進程會在子進行事務時凍結(直到它調用_exit(2)
或execve(2)
)。 所以在任何一個時刻,只有一個pid
變量。
作為旁注,你正在做的是不安全的。 標准清楚地說明了這一點:
vfork()函數應該等效於fork(),除非如果vfork()創建的進程修改除了用於存儲vfork()的返回值的pid_t類型的變量之外的任何數據,則該行為是未定義的 ,或者從調用vfork()的函數返回,或在成功調用_exit()或exec 函數系列之前調用任何其他函數。
作為第二個注釋, vfork
已從SUSv4
刪除 - 使用它確實沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.