linux父子进程之间之间的区别与联系
生活随笔
收集整理的這篇文章主要介紹了
linux父子进程之间之间的区别与联系
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
剛fork之后:
父子相同處: 全局變量、.data、.text、棧、堆、環境變量、用戶ID、宿主目錄、進程工作目錄、信號處理方式...
父子不同處: 1.進程ID ? 2.fork返回值 ? 3.父進程ID ? ?4.進程運行時間 ? ?5.鬧鐘(定時器) ? 6.未決信號集
似乎,子進程復制了父進程0-3G用戶空間內容,以及父進程的PCB,但pid不同。真的每fork一個子進程都要將父進程的0-3G地址空間完全拷貝一份,然后在映射至物理內存嗎?
當然不是!父子進程間遵循讀時共享寫時復制的原則。這樣設計,無論子進程執行父進程的邏輯還是執行自己的邏輯都能節省內存開銷。 ??
下面一段簡單的程序可以很好的測試出父子進程是否共享全局變量。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
重點注意!可以看出父子進程并不是共享全局變量
父子進程共享的有:
1. 文件描述符(打開文件的結構體)
?2. mmap建立的映射區?
特別的,fork之后父進程先執行還是子進程先執行不確定。取決于內核所使用的調度算法。
總結
以上是生活随笔為你收集整理的linux父子进程之间之间的区别与联系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 要求两个给定正整数的最大公约数和最小公倍
- 下一篇: linux 其他常用命令