在Linux中,如果父進程具有任何數據結構(例如,樹,列表),那麼子進程繼承的是那些數據結構?我的意思是,孩子是否可以訪問相同的數據結構(指向該數據結構的任何類型的指針)?子進程是否繼承父進程的數據結構?
回答
如果您在討論fork()
之後的Linux/Unix進程,是的。他們得到他們自己的父進程的數據副本,所以無論他們中的哪一個在fork之後都看不到另一個(通常通過寫時複製來實現),所以內存頁不會被複制,直到寫入,但這是用戶程序沒有看到的細節)。
如果您在談論Windows啓動一個新進程CreateProcess()
,否,新進程不會從父進程繼承任何數據結構。
這兩者都與您使用的操作系統有關,而不是使用任何特定的編程語言。
假設你正在使用類似fork()
創建子進程,他們會繼承一切的全球對實際父進程的背景:
- 設置環境變量
- 打開文件描述符
- 等等
全局範圍變量將複製給孩子pr從他們實際所在的狀態中獲取背景。將這些變量的變化不會在中體現出來。
如果要在父級和子級進程之間進行通信,請考慮使用pipes或shared memory。
yes fork();子進程將訪問相同的數據結構,否則它將獲得該數據結構的副本 – user2831683
@ user2831683沒有副本!只需參考,在訪問此類數據時應注意競爭條件。 –
因此,如果我在子進程中對數據結構進行一些更改,那麼這些更改也將用於父進程 – user2831683
- 1. 子進程如何使用fork()從父進程繼承數據?
- 2. 從父進程在Perl中的子進程繼承的模塊
- 3. 子進程繼承什麼?
- 4. 繼承Windows中父進程的句柄
- 5. Linux中的新進程從父進程的優先級繼承
- 6. 如何知道環境變量是否從父進程繼承?
- 7. 變量/父子程序繼承/子結構
- 8. 子進程是否總是在父進程內運行?是否...線程...?
- 9. 子進程是否可以修改父進程的內存?
- 10. 子進程/父進程
- 11. 獲取繼承父代IO的子進程的輸出
- 12. 防止繼承父級環境的子進程
- 13. 檢測子進程是否掛起父進程
- 14. 是否將子進程pid()分配給父進程?
- 15. mod_perl並在子進程中繼承STDIN
- 16. 嵌套數據結構,讓孩子繼承父
- 17. 只殺害父進程,而不是在bash中的子進程和父進程
- 18. 子進程stdin不會獲取父進程發送的數據
- 19. 父進程和子進程的關係
- 20. 沒有掛父進程的子進程
- 21. 如何使COM主機進程避免繼承父進程的環境變量
- 22. 創建一個進程而不繼承父進程的環境變量
- 23. 子應用程序是否會從其父級web.config繼承?
- 24. 父和子進程
- 25. C:父子進程
- 26. Linux進程如何將數據從父進程傳遞給子進程
- 27. 退出後Java進程構建器子進程繼續
- 28. 父進程和子進程之間共享哪些內存結構?
- 29. 如何看父進程和子進程
- 30. 從子進程獲取父進程ID
(linux),子進程獲取數據結構的副本還是獲取數據結構的新數據結構(例如樹)。 – user2831683
如果用「其新數據結構」表示一棵空樹,而父樹有一些條目 - 不。孩子的數據空間是分岔時父母的數據空間的精確副本。所以這是一個新的數據結構,因爲它是一個副本,而不是原始數據結構,如果您修改子進程的副本,那麼父進程不會注意到。但是,在fork之後,其中一個進程會更改內容,數據結構的內容將完全相同。 –
是否有任何方法可以使其中的更改反映在另一個 – user2831683