argc 傳進的參數個數
argv :參數
注意:利用for循環打印char* argv[]
for循環內部不能直接定義int i=0; 內置不對算法
[root@localhost 2020-03-19]# ls main main.c [root@localhost 2020-03-19]# ./main argc:1 argc[0]=./main [root@localhost 2020-03-19]# ./main hello world argc:3 argc[0]=./main argc[1]=hello argc[2]=world [root@localhost 2020-03-19]# ./main "hello world" argc:2 argc[0]=./main argc[1]=hello world
緩衝區 加載 中止條件 /\n
當遇到n的時候,才把緩衝區的內容所有輸出
注意:exit(0) 與_exit(0)的區別 :
_exit(0) 不會去刷新緩衝區,直接結束進程併發
fork()後,會生成一個獨立的子進程,父進程fork()後會返回子進程的pid,子進程會返回0
(子進程與父進程的pid !=)函數
pid_t pid = fork();
建立(複製)的子進程會跳過建立他的fork(),避免進入死循環spa
PCB裏面有單獨的一部分 去記錄 當前節點的父進程ppid是誰,咱們很容易經過子進程去 尋找父進程;
因此能夠經過tid_t getppid(); 經過子id獲得父id
可是咱們應該怎麼去尋找父進程的子進程呢?操作系統
因此在子進程返回給父進程過程當中 記錄下兒子的pid
便於之後去查找本身的兒子
僅此一次機會記錄下來
子進程和父進程是兩個進程
先執行誰取決於操做系統的調度算法 -併發執行 code
若是指明想要父子進程兩個進程之間誰去容許 運行
能夠利用:父進程會返回子進程pid 子進程返回0這一特性
使用這樣的blog
if(pis==0) ..子進程.. else ..父進程..
注意事項:第二次循環的時候父子進程都進行了fork複製,因此有3個A3個B進程
去掉n之後
緩衝區原本有的值也賦值了
AB | i=1
AB AB |i=2
+AB |i=1
因此會出現4個A 4個B圖片
for(i=0;i<2;++i) { pit_t pid = fork(); assert(-1 != pid); if(pid == 0) { printf("A "); } else { printf("B "); } }
因此是3個A內存
引入寫時拷貝技術: