![](/img/trans.png)
[英]Get new pid from nd_syscall.vfork.return in systemtap
[英]Return type of vfork()
來自 GNU 手冊:
vfork() function 與 fork(2) 具有相同的效果,除了如果由 vfork() 創建的進程修改了用於存儲來自 vfork() 的返回值的 pid_t 類型的變量以外的任何數據,則行為未定義,
這是什么意思? 這是否意味着vfork()
的返回值不能分配給非pid_t
類型的變量?
該手冊對此感到非常困惑。 實際上,兩個進程(子進程和父進程)共享相同的地址空間,甚至是堆棧!
vfork()
返回兩次:
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.