簡體   English   中英

vfork() 的返回類型

[英]Return type of vfork()

來自 GNU 手冊:

vfork() function 與 fork(2) 具有相同的效果,除了如果由 vfork() 創建的進程修改了用於存儲來自 vfork() 的返回值的 pid_t 類型的變量以外的任何數據,則行為未定義,

這是什么意思? 這是否意味着vfork()的返回值不能分配給非pid_t類型的變量?

該手冊對此感到非常困惑。 實際上,兩個進程(子進程和父進程)共享相同的地址空間,甚至是堆棧!

vfork()返回兩次:

  1. 在子進程中,返回 0
  2. 當子進程完成或執行其他程序時,第二次返回是在父進程中使用子進程標識符完成的。 同時,父進程被暫停。

fork()/vfork()的返回碼通常存儲在一個變量中(類型為pid_t以遵循系統調用的概要):

pid_t pid = vfork();

當我們運行vfork()時,由於地址空間在父親和孩子之間共享,因此在父親和孩子中都修改了相同的變量! 但是在子進程中它被順序設置為0,並且在后者退出或執行程序之后,該變量被第二次設置,但在父進程中使用子進程的pid。

注意手冊說:

vfork() 與 fork(2) 的不同之處在於調用線程被掛起,直到子進程終止(正常情況下,通過調用 _exit(2),或異常情況下,在傳遞致命信號后),或者調用 execve( 2)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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