A. linux中讓子進程執行和父進程不同功能的兩種常用方法
運維
Linux系統進程式控制制
行者111111111111111
原創
關注
0點贊·3人閱讀
1、進程創建
shell命令行啟動程序指令皆是創建了進程,我們通常通過調用fork()函數創建子進程。
1.1、fork()函數用法簡介
調用fork後,操作系統內核將:
分配新的內存塊和內核數據結構給子進程
將父進程部分數據結構內容拷貝至子進程
添加子進程到系統進程列表當中
fork返回,開始調度器調度
1.2、fork函數返回值
子進程返回0,父進程返回的是子進程的pid
原因:fork之後進入內核,申請內存構建子進程PCB、虛擬內存、頁表,將子進程設置R狀態,放入調度隊列,由於創建子進程之後父子進程共享代碼,所以父子進程都會有return返回值。返回值返回給變數本質發生了寫時拷貝,改變了子進程對應頁表的指向,數據映射到了其他區域
1.3、寫時拷貝
由於進程要獨立,代碼不可修改,數據可改,所以默認數據各有一份,但是內存是有限度的,如果把父進程數據全部再拷貝一份,那麼太浪費內存,甚至導致fork失敗。通常通過寫時拷貝實現,就是當父或子進程修改數據時,將要修改的數據拷貝一份,讓子進程頁表指向新的重復數據在發生修改
B. linux 進程調度演算法問題 主進程fork了 4個子進程a b c d 優先順序相等 一種
cb這是第一個fork的子進程產生的第一個fork父進程進入elseif先執行子進程輸出b這是第一個fork的父進程產生的父進程輸出ab所以一共是三個進程父——>父(產生父子)父——>子(終)