從系統呼叫fork,到程序的建立與終止

2021-06-22 14:39:02 字數 1354 閱讀 5934

最近好長時間沒有更新部落格,終極原因還是懶。

系統呼叫fork(),與_exit(), wait(),和execve()等系統呼叫都是有關於程序建立與終止的。

系統呼叫fork允許乙個程序(父程序)建立新程序(子程序)

庫函式exit負責終止程序,將程序占用資源釋放,交還給系統

系統呼叫wait 父程序用來獲取子程序狀態

系統呼叫execve,載入乙個新程式,執行新的程式

關於系統呼叫fork

pid_t fork(void);
fork()函式返回兩次返回值,對父程序而言,返回值為-1時,代表建立子程序失敗,返回值非0值時,這個返回值時子程序的pid。對子程序而言,返回值為0。

fork()函式的習慣用語是

pid_t childpid;

switch(childpid = fork())

待補充:fork()後,子程序與父程序的記憶體關係

在coolshell的帖子《乙個fork的面試題》中,有**片段如下:

#include #include #include int main(void)

return 0;

}

這個片段集中考量了兩個點:

呼叫fork()返回兩次,執**況怎樣

子程序在fork出父程序時,會共享父程序資源,包括記憶體,訊號等,也會複製父程序的stdio區

關於點1,我們可以將**中的printf語句修改為列印程序pid,修改如下

#include #include #include int main(void)

return 0;

}

執**況為:

$ ./coolshell.o
22072

22072

22074

22073

22073

22075

但是如果我們這樣使用,如:

$./coolshell.o > out

out中的內容是怎樣的呢?

22078

22078

22078

22080

22079

22079

22079

22081

《linux/unix系統程式設計手冊》(tlpi, 第24章與第25章)

乙個fork的面試題,

shell下ls後,都有哪些系統呼叫產生(

Linux 呼叫fork 建立兩個子程序

linux 呼叫fork 建立兩個子程序 編寫一段程式,使用系統呼叫 fork 建立兩個子程序。當此程式執行時,在系統中有乙個父程序和兩個子程序活動。讓每乙個程序在螢幕上顯示一句話,觀察記 錄螢幕上的顯示結果。include int main int argc,char argv if pid1 f...

程序從建立到結束的狀態

乙個程序的誕生,是從其父程序呼叫fork 開始的。程序從剛開始被建立出來,是處於task running 就緒態 程序被放在等待佇列中排隊等待系統排程。linux核心中的函式sched 稱為排程器,它會根據各種引數來選擇乙個等待的程序去占用cpu,當程序占用了cpu後,就從就緒態轉變成了執行態。此時...

程序的建立 fork與vfork

目錄 fork函式 fork的使用 vfork函式 fork 與 vfock 都是建立乙個程序,那它們有什麼區別呢?程序的正常終止方法?程序的異常終止 為什麼vfork 子程序中可以呼叫 exit 卻不可以呼叫exit 也不可以直接return呢?標頭檔案 include 函式原型 pid t fo...