標籤:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include <unistd.h>#include<errno.h>//fork進程//一次調用,兩個分支返回//Linux核心如何做到的這一點?// 每一個進程在各自的地址空間中返回//為什麼fork傳回值設計成>0是父進程分支 =0是子進程分支// 父子關係是1:n的關係,父親找孩子的pid比較難//fork理解角度:一次調用,2個分支同時運行, 並發概念.//fork子進程為什麼從fork之後運行,不是再從頭到尾從main函數重新來一遍?// fork建立子進程的機制有關係. 子進程建立機制:寫實複製// 子進程要拷貝父進程的程式碼片段/堆棧段/資料區段/PCB進程式控制制塊(Linux核心管理進程的資料結構)//既然孩子進程拷貝了父進程的運行情境,所以孩子沒有必要再運行一邊了//系統錯誤碼放在全域變數errno裡面//在程式中,perror可以把errno對應的string列印出來//如果在shell下可以通過perror + 錯誤碼列印字串int main(void){ printf("sdfsd\n"); pid_t pid; printf("befor fork pid:%d\n", getpid()); //fork子進程 pid = fork(); if(-1 == pid) { perror("fork err"); return 0; } if(pid > 0) // 大於0是父進程 { printf("parent :%d\n", getpid()); } if(0 == pid) { printf("chlid :%d\n", getpid()); } printf("after fork\n"); return 0;}/*運行結果----------------sdfsdbefor fork pid:15554parent :15554after forkchlid :15555after fork-----------------*/
複製去Google翻譯翻譯結果
[學習筆記]fork深入理解