Linux 程序控制

2021-08-19 20:18:11 字數 2501 閱讀 2809

#include pid_t fork(void);

返回值:⾃自程序中返回0,⽗父程序返回⼦子程序id,出錯返回-1

程序調⽤用fork,當控制轉移到核心中的fork**後,核心做:

1、分配新的記憶體塊和核心資料結構給⼦子程序;

2、將⽗父程序部分資料結構內容拷⻉貝⾄至⼦子程序;

3、新增⼦子程序到系統程序列表當中;

4、fork返回,開始排程器排程;

#include#include#include#includeint main()

printf("after: pid is %d ,fork return %d\n",getpid(),pid);

sleep(1);

return 0;

}

2. vfork

#includepid_t vfork();

vfork與fork的用法是一樣的:子程序返回0,父程序返回子程序程序id,出錯返回-1。

1.vfork建立程序時對父程序的拷貝是淺拷貝,與父程序公用同乙份空間。 

2.vfork保證子程序先執行,在它呼叫exec或exit 之後父程序才可能被排程執行。

#include#include#includeint glob=100;

int main()

else //father

return 0;

}

(1)**執行完畢,結果正確。 

(2)**執行完畢,結果不正確。 

(3)**異常終止。

(1)正常終止: 

a.從main返回 

b.呼叫exit 

c.呼叫_exit 

(2)異常退出: 

ctrl + c //訊號終止

#includevoid _exit(int status);

#include#include#includeint main()

#includevoid exit(int status);

#include#include#includeint main()

#include#includepid_t wait(int* status);

返回值:成功返回被等待程序pid,失敗返回-1。

引數:輸出型引數,獲取子程序退出狀態,不關心則可以設定成為null。

#include#includepid_t waitpid(pid_t pid,int* status,int options);

返回值:

a.當正常返回的時候waitpid返**集到子程序的程序id。

b.如果設定了選項wnohang,而呼叫中waitpid發現沒有已退出的子程序可收集,則返回0。

c.如果呼叫出錯,則返回-1,這時errno 會被設定成相應的值以指示錯誤所在。

a.pid = -1,等待任乙個子程序,與wait等效。 

b.pid > 0, 等待其程序id與pid相等的子程序。

a.wifexited(status): 若為正常終止子程序返回的狀態,則為真。(檢視程序是否是正常退出) 

b.wexitstatus( status ): 若wifexited非0,提取子程序退出碼。(檢視程序的退出碼)

wnohang: 若pid指定的子程序沒有結束,則waitpid() 函式返回0,不予等待。若正常退出,則返回該子程序的id。

1.如果子程序已經退出,呼叫 wait / waitpid 時, wait / waitpid 會立即返回,並釋放資源,獲得子程序退出資訊。 

2.如果在任意時刻呼叫 wait / waitpid ,子程序存在且正常執行,則程序可能阻塞。 

3.如果不存在該子程序,則立即出錯返回。

#include#include#include#include#includeint main()

else if(pid==0)

else

else

}return 0;

}

#include#include#include#includeint main()

else if(pid==0) //child

else

sleep(1);

}while(ret==0);

if(wifexited(status) && ret == pid)

else

}return 0;

}

linux 程序控制

什麼是程序 每乙個程序在系統中都有唯一的id標示它,此id為程序標示符 程序標示符的型別 pit t,其實是乙個無符號整形 乙個程序標示符對應唯一的乙個程序,多個程序標示符可以對應同乙個程式 程序和程式的區別 程式 可執行的二進位制 檔案,這種檔案載入到記憶體中執行就得到了乙個程序 程序 同乙個程式...

Linux程序控制

linux程序控制 獲取pid include include pid t getpdi void 獲取本程序id pdi t getppid vodi 獲取父程序id,及獲取建立子程序的程序id 程序建立 include pid t fork void 建立子程序 呼叫一次返回兩次值 1.父程序中...

linux程序控制

linux程序控制 編寫命令直譯器 一 背景 之前在 計算機作業系統 這本書中已經多次接觸了程序這一概念,而程序在作業系統中具體是做什麼的呢?卻沒有實際的與程序發生過互動,因此也就沒有實際的感受。對於我來說程序僅僅停留在概念的層面上 程序是程式執行時的記憶體空間和設定或者說程序就是程式的進行時。沒有...