最近好長時間沒有更新部落格,終極原因還是懶。
系統呼叫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...