我有一個問題其實我沒有理解關於子進程和父進程的一些信息。當我在子進程中更改全局變量時,這些更改不會影響父進程。我在這個網站上看到了一句話。它說:「修改父項或子項中的任何變量都不會看到對另一項的更改。」你能否提供更多信息?謝謝。全局變量,子進程和父進程
回答
我認爲你會對進程和線程之間的差異感到困惑。
A 過程可以包含多個線程。一個進程有自己的地址空間和系統變量(比如文件句柄)。進程只能通過IPC機制進行交互,否則不能直接觸及其他進程變量。每個進程都有一個操作系統用來識別它的PID(至少在Linux中)。進程可以有許多線程在進程之上運行。
A 線程是一個獨特的結構,可以在一個進程內運行。每個線程都有自己獨特的堆棧指針(指向程序集執行)和唯一的註冊表值。當OS在線程之間切換時,它切換當前的執行行並恢復與該線程一起存儲的所有分區值。但是,進程中的線程共享所有相同的內存,這就是爲什麼您可以修改線程之間的全局變量和類變量並且它們受到影響。
如果有人想要在他們的鐘聲可以。這只是我認爲理解進程和線程之間差異的一些重要點的簡短總結。
我明白你在說什麼。所以我可以有1個進程,但在裏面,可以有多個線程,他們共享相同的內存空間,這就是爲什麼變化會影響所有內存。好,我知道了。謝謝! – 2012-02-02 01:54:56
@AhmetTanakol如果他們對你有幫助,你應該接受答案。我注意到你沒有接受你提出的任何問題。 – onit 2012-02-02 01:55:58
調用fork()之後,會創建父級的確切副本(好吧,不是真的,請參閱聯機幫助頁以瞭解詳細信息)因此,子級和父級都有不同的地址空間。因此,聲明modifying any variables in the parent or child will not see the changes also being made to the other one.
請閱讀manpage of fork()的確切細節。
- 1. 父進程和子進程的全局變量
- 2. 父和子進程
- 3. 如何看父進程和子進程
- 4. 父進程和子進程時間
- 5. 父進程和子進程的關係
- 6. fork()子進程和父進程
- 7. 子進程/父進程
- 8. 如何從子進程設置父進程的環境變量?
- 9. 如何等待子進程在父進程中設置變量?
- 10. 父進程變量裏面的子進程在Perl中
- 11. 同步父和子進程
- 12. 爲什麼子進程和父進程的變量的地址是相同
- 13. 全局變量和線程
- 14. 只殺害父進程,而不是在bash中的子進程和父進程
- 15. 全局變量進行的跨在Python模塊和線程
- 16. 防止池進程導入__main__和全局變量
- 17. 共享進程和DLL之間的全局/靜態變量
- 18. C:父子進程
- 19. 從子進程獲取父進程ID
- 20. 讓子進程等待父進程
- 21. 沒有掛父進程的子進程
- 22. 如何從另一個進程設置一個Linux進程的全局變量?
- 23. 父進程有多個子進程和2個子進程有一個子進程
- 24. 一個子進程能夠通過環境變量設置回父進程
- 25. 測量CPU和子進程
- 26. 父進程等到子進程終止時,子進程如何才能殺死父進程?
- 27. 子進程和父進程異步通信linux
- 28. 發送給子進程和父進程的信號
- 29. 在父進程和子進程之間發送信號
- 30. 這裏發生父進程和子進程的切換?
順便說一下,我讀了另一條評論。它說,子進程和父進程在內存中有不同的空間,這就是爲什麼變更不起作用。我不知道這是否屬實。 – 2012-02-02 01:34:00
進程不共享相同的虛擬內存地址空間,因此它們不能訪問彼此的變量。 – onit 2012-02-02 01:34:02