Linux程序控制程式設計之fork wait

2021-05-25 10:48:06 字數 1002 閱讀 5182

本文將記錄我在學習fork和wait(waitpid)這兩個函式的過程。

1.fork

在linux中,建立乙個新程序常用fork函式,它非常特別,執行一次,居然返回兩個值,這與一般的函式是大大的不一樣的,這點引起了我高度的注意。

prototype: pid_t fork(void)

return: 0 ——子程序

>0(即子程序id)——父程序

-1 ——出錯

接下來繼續介紹wait函式,最後再給出例程實踐。

2.wait

wait函式用於使父程序阻塞,直到乙個子程序結束或者程序接到了乙個指定的訊號為止。若父程序沒有子程序或者子程序已結束,則wait就會立即返回。

prototype : pid_t wait(int *status)

parameter: status是該子程序退出時的狀態,若為null,則代表任意狀態結束子程序。若不為空,則代表指定狀態結束子程序。

return : 子程序id號 —— success

-1 —— failure

fork和wait的使用範例如下

程式解釋:pc = fork();這一句建立了乙個新的子程序,根據返回的值來進行判斷將要執行的是父程序還是子程序。fork()與vfork()不一樣,建立子程序之後,接著呼叫的是父程序還是子程序是隨機的,具體關於fork和vfork的介紹請看

既然執行父程序或者子程序的先後是隨機的,那上述例程分兩種情況論述。

1.先執行子程序

程式自上而下執行,子程序列印語句後,睡眠10s,父程序接管,等待子程序結束(睡眠結束即子程序結束),獲取結束的子程序的pid,接著列印出來。

2.先執行父程序

父程序一開始就執行wait函式,因為子程序還沒有結束(甚至還沒有開始,但是已經存在的),所以父程序在乙個阻塞的狀態,既然父程序阻塞了,那就轉向執行子程序了,接下來的過程就跟第一種情況一樣了。

大家可以嘗試編譯、執行上述程式,看看效果,這對於fork和wait的作用就一目了然了。

linux程式設計之程序控制

一 fork include pid t fork void 返回值 有兩個,乙個是子程序的id,另乙個為零。當返回值為0時,進入子程序,大於0進入父程序,返回 1時建立程序錯誤。子程序與父程序的比較 1 子程序與父程序的程序id不同。且父程序id不同。2 記憶體布局 子程序是父程序的副本,其中子程...

LINUX環境程式設計之程序控制(上)

每個程序都有乙個非負整型表示的唯一程序id。雖然該id是唯一的,但是程序id是可復用的。當乙個程序終止後,其程序id就成為復用的候選者。系統中有一些專用程序,但是具體細節隨實現而不同。id為0的程序通常是排程程序,常常被稱為交換程序。該程序是核心的一部分,它並不執行任何磁碟上的程式,因此也被成為系統...

linux程序控制程式設計

一 程序與程式 程式是放到磁碟的可執行檔案 程序是指程式執行的例項 程序是動態的,程式是靜態的 程式是有序 的集合 程序是程式的執行。通常程序不可在計算機之間遷移 而程式通常對應著檔案 靜態和可以複製。程序是暫時的,程式使長久的 程序是乙個狀態變化的過程,程式可長久儲存。程序與程式組成不同 程序的組...