LINUX C 語言 程序管理(一)

2021-07-15 19:06:28 字數 1881 閱讀 6711

子程序和父程序的開始與結束

子程序結束的時候會向父程序傳送訊號,讓父程序幫助**程序

父程序先結束的時候,子程序會過繼到init程序下(即指定init程序為新的父程序)

如果父程序因為各種原因沒有收到子程序傳送的訊號,則無法**子程序的資源,子程序會成為殭屍程序

子程序與父程序的資源

程序的記憶體區劃分:**區、全域性區,堆區,**區

子程序中的資源得到的是父程序的乙份拷貝,(包括全域性區,棧區,堆區) ,**區與父程序共享

子程序資源的**

pid_t wait(int * status);

相當於waitpid(-1,&status,0);

pid_t waitpid(pid_t pid,int * status, int options);

關於pid的引數

< -1 等待所有組id等於pid的絕對值的子程序

= -1 等待所有子程序

= 0   等待所有組id等於父程序組id的子程序

> 0   等待pid為pid的子程序

關於options的引數

whong          :如果沒有子程序結束的話立刻返回

wuntraced   :

wcontinued

返回值:

正常返回pid

錯誤返回-1 如果所有子程序都已經**完畢 errno會被設定為    echild

程序的建立

1.  fork  ():子程序拷貝父程序的資料段,**段

vfork ( ):子程序與父程序共享資料段

2.  fork ()父子程序的執行次序不確定

vfork 保證子程序先執行,在呼叫exec 或exit 之前與父程序資料是共享的,在它呼叫exec

或exit 之後父程序才可能被排程執行。

3.  vfork ()保證子程序先執行,在她呼叫exec 或exit 之後父程序才可能被排程執行。如果在

呼叫這兩個函式之前子程序依賴於父程序的進一步動作,則會導致死鎖。

程序的終止

正常的終止方式

a.在main函式中執行了return 0;

b.呼叫exit()函式終止程序

c.呼叫_exit()/_exit()函式終止程序

d.最後乙個執行緒返回

e.最後乙個執行緒呼叫了pthread_exit()函式

非正常的終止方式

a.採用訊號終止程序,ctrl+c

b.最後乙個執行緒被其他執行緒呼叫了pthread_cancel()取消

atexit(void (* func)(void));註冊乙個在退出的時候執行的函式

註冊的函式將在exit或者return時呼叫

如果使用_exit()/_exit()時將不會呼叫註冊的函式

程序管理

wait 函式用於掛起當前正在執行的程序,進入阻塞狀態,等待子程序的狀態改變(終止)

pid_t     wait(int * status)引數用於獲取子程序改變的狀態

成功返回所等到的子程序的狀態,失敗返回-1 擴充套件

呼叫fork的次數和生成的子程序數量為 2的n次方

建立三個程序

fork();

if(0!=pid)

waitpid**子程序,不包括子程序的子程序

我們建立如下子程序

pid_t p1,p2;

p1 = fork();

if(0 == p1)

if(0 == p2)

while(1)

printf("all child was died\n");

}else if(pres)

else}

output:

輸出結果可以得出只**了有主程序建立的兩個子程序,而由子程序建立的子程序並沒有被**

linux c語言程式設計中《程序的管理wait函式》

linux wait函式解析 程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如果讓它找到了這樣乙個已經變成殭屍的子程序,wait 就會收集這個子程序的資訊,並把它徹底銷毀後返回 如果沒有找到這樣乙個子程序,wait就會一直阻塞在這裡,直到有乙個出現為止。...

Linux C程序管理之訊號 共享記憶體

訊號的本質 訊號是在軟體層上對中斷機制的一種模擬。kill alarm 等函式 訊號種類 訊號分為可靠訊號和不可靠訊號 unix系統只定義了 32種訊號,red hat 支援64 種訊號,訊號大於 32 64 的為可靠訊號,其餘為不可考訊號 我主要想給大家介紹的是下面的關於訊號的幾個函式 1.kil...

Linux C程序 執行緒

1 程序間通訊 庫 在使用者空間是不可能實現程序通訊,可通過linux核心建立物件來通訊 pid t pid 程序號的型別定義 pid fork 建立程序 if pid 0 子程序 if pid 1 父程序 2 執行緒間通訊 庫 在使用者空間可以實現執行緒間通訊,通過全域性變數通訊 pthread ...