這裡講解幾個在 linux 作業系統上使用 fork 系統呼叫。(不定期更新)
一、atexit 函式
void cleanup(void執行結果:) void
fork6()
int atexit(void (*func)(void))函式,當程序正常結束時才會呼叫 atexit 中的 func 方法,無論你將 func 函式寫在**。
二、**子程序
當乙個程序由於某種原因終止時,核心並不立即將其從系統中清除。而是會保持在終止的狀態等待父程序**,這稱之為 」僵死程序「 。當父程序**已終止的程序時,核心將子程序的退出狀態傳遞給父程序,然後拋棄已終止的程序。至此,該程序不存在。
如果乙個父程序終止了,核心會安排 init 程序為它的孤兒程序的養父。
在 64 位系統中,養父的程序號一般不為 1 ,而是乙個隨機程序號,但是這個程序的 cmd 都是 」/lib/systemd/systemd --user"/
(使用ps -ef 命令檢視)
1. 子程序先結束,父程序迴圈掛起。兒子程序正常**。
void執行結果:fork7()
else
}
2. 父程序先結束,子程序陷入迴圈掛起。
void執行結果:fork8()
else
}
第二個**樣例中,父程序比子程序先結束執行,此時子程序成為孤兒程序,被收養。養父為前面介紹的程序。
3. 下面有一道對**子程序有一定參考性的題。
int編譯**使用下列命令main()
//建立第三個程序
pid3 =fork();
if (pid3 == 0
)
//在3號程序裡面,建立第5個程序
pid5 =fork();
if (pid5 == 0
)
//等待子程序的結束 便於觀察pid之間的關係
printf("
3號程序結束\n
");
exit(0);
}//等待子執行緒的結束
printf("
1號程序結束\n");
return0;
}————————————————
//
$ gcc -o process.out processes.c -lpthread執行結果如下:
該程式的程序圖如下:
Linux下的fork 函式
fork fork的英文翻譯是 分叉 同樣在linux中我們也可以理解為如果使用了fork 函式,程序也會 分叉 下面進行具體的說明fork 函式。定義 通過系統呼叫建立乙個與原程序幾乎完全相同的程序,其中新產生的程序成為子程序。原型 pid t fork void fid t相當於int型別特殊之...
fork 函式 fork 函式的使用
fork的意思是個叉子,在unix及其衍生版linux中,用於建立子程序,現在看一下fork函式的基本用法。include includeint main printf c b fflush stdout fork printf c c fflush stdout 上圖的輸出是什麼呢?答案是 bab...
c 中的fork函式 FORK()函式
乙個程序,包括 資料和分配給程序的資源。fork 函式通過系統呼叫建立乙個與原來程序幾乎完全相同的程序,也就是兩個程序可以做完全相同的事,但如果初始引數或者傳入的變數不同,兩個程序也可以做不同的事。乙個程序呼叫fork 函式後,系統先給新的程序分配資源,例如儲存資料和 的空間。然後把原來的程序的所有...