簡體   English   中英

vfork()系統調用中的返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM