Linux程序控制 程序終止 程序等待

2021-10-05 08:23:59 字數 2381 閱讀 6816

目錄

程序終止

程序中退出的方式

void _exit(int status)與void  exit(int status)的不同

程序等待

pid_t wait(int * status)

void waitpid(pid_t, int* status, int options)

阻塞與非阻塞

status

判斷程序是否正常退出

程序終止就是退出乙個程序

程序退出的三個場景

1:正常退出,結果符合預期

2:正常退出,結果不符合預期結果

3:異常退出

1:在main函式中return,退出程序

2:void _exit(int status),退出程序

3:void _exit(int status),退出程序

void _exit(int status)是系統呼叫介面,退出程序時不會重新整理緩衝區,直接釋放資源

void exit(int status)是庫函式,退出程序時會重新整理緩衝區

#include #include #include void func()

int main()

status時退出的返回值,它的作用等會在程序等待中再講

程序等待的作用

程序等待時為了避免殭屍程序的產生,殭屍程序就是處於退出狀態的程序,但是資源沒有得到完全釋放,產生殭屍程序的原因是因為子程序先於父程序退出,而父程序沒有獲取子程序的退出資訊,則該子程序就成為殭屍程序

為了避免這種情況,父程序等待子程序退出,獲取子程序的推出資訊,釋放子程序資源,避免產生殭屍程序

阻塞等待任意乙個子程序的退出,通過status獲取子程序的退出返回值,pit_d wait(int* status)的返回值為子程序的該pid

#include #include #include #include int main()

sleep(10);//為了方便觀察程序的狀態

int status;

wait(&status)

//只有父程序才能走下來

我們在上面提到過wait(int* status)等待任意乙個子程序的退出,那麼就是說wait不僅僅處理的是剛剛退出的程序,只要是在呼叫子程序退出,wait都會獲取子程序的退出返回值,釋放資源

引數的說明:

pid_t:值為-1表示等待任意乙個程序的退出

status:程序退出的返回值

options:值為0則阻塞等待子程序的退出,waitpid( -1, &status, 0)  == wait( &status)  / 當值為wnohong---將waitpid設定為非阻塞 

waitpid的返回值:-1 表示出錯0 表示沒有子程序退出>0表示又子程序退出,退出的子程序pid就是它的返回值

阻塞:為了完成功能,發起呼叫,若當前不具備完成完成功能的條件,則一直等待

非阻塞:為了完成功能,發起呼叫,若當前不具備完成功能的條件,則直接報錯

用wait和waitpia獲取status的返回值是,要注意 :status有四個位元組,但是前十六個位元組未使用;返回值放在低十六位中的高八位

因此status的返回值獲取:(status>>8)&0xff( &0xff 只是為了取得低八位)

程序的退出場景大致分為兩種: 正常退出和異常退出 ,若異常退出則此時程序退出的返回值是不可信的,因此在獲取程序退出的返回值時,應該先判斷程序是否時正常推出的

程是否正常退出的資訊存放在status的低七位中低七位為0 則表示程序正常退出,反之異常退出

因此獲取status中程序是否正常退出資訊:status & 0x7f

程序控制 程序建立 程序終止 程序等待 程式替換

程序建立 fork vfork vfork 的子程序不能在main函式中return退出 fork 和 vfork clone 同樣可以建立程序或者執行緒,它的引數更多,功能更強大 在核心中都是呼叫 do fork 實現程序的建立,只是引數不同 fork 要建立 pcb,虛擬位址空間,頁表 程序終止...

Linux程序控制(建立 等待 終止)

一 linux程序建立 1.1 fork函式 在linux中fork函式是乙個非常重要的函式,它從已存在程序中建立了乙個新程序。新程序為子程序,而原程序為父程序 include pid t fork void 返回值 自程序中返回0,父程序返回子程序id,出錯返回 1 程序呼叫fork,當控制轉移到...

Linux程序控制 程序建立

linux下建立程序的方式有三種,通過fork vfork clone系統呼叫實現程序的建立 1.fork fork函式用於建立乙個新的程序,其建立的程序和當前程序為父關係,子程序建立自己的task struct 之後初始化子程序的互斥變數 cpu定時器 自旋鎖 掛起訊號 程序資料結構等並且設定程序...