日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux父子进程之间之间的区别与联系

發布時間:2025/3/15 linux 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux父子进程之间之间的区别与联系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

剛fork之后:
父子相同處: 全局變量、.data、.text、棧、堆、環境變量、用戶ID、宿主目錄、進程工作目錄、信號處理方式...
父子不同處: 1.進程ID ? 2.fork返回值 ? 3.父進程ID ? ?4.進程運行時間 ? ?5.鬧鐘(定時器) ? 6.未決信號集
似乎,子進程復制了父進程0-3G用戶空間內容,以及父進程的PCB,但pid不同。真的每fork一個子進程都要將父進程的0-3G地址空間完全拷貝一份,然后在映射至物理內存嗎?
當然不是!父子進程間遵循讀時共享寫時復制的原則。這樣設計,無論子進程執行父進程的邏輯還是執行自己的邏輯都能節省內存開銷。 ??
下面一段簡單的程序可以很好的測試出父子進程是否共享全局變量。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

#include <stdio.h> #include <stdlib.h> #include <unistd.h>int a = 100; //.data int main(void) {pid_t pid;pid = fork();if(pid == 0){ //sona = 2000;printf("child, a = %d\n", a);} else {sleep(1); //保證son先運行printf("parent, a = %d\n", a);}return 0; }


重點注意!可以看出父子進程并不是共享全局變量
父子進程共享的有:

1. 文件描述符(打開文件的結構體)

?2. mmap建立的映射區?

特別的,fork之后父進程先執行還是子進程先執行不確定。取決于內核所使用的調度算法。

總結

以上是生活随笔為你收集整理的linux父子进程之间之间的区别与联系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。