linux之僵死程序

2021-10-22 00:04:33 字數 1312 閱讀 4760

(1) 僵死程序概念:父程序未結束,子程序結束了,而且父程序沒有處理子程序的結束(父程序沒有獲取子程序的退出碼)

(2)孤兒程序:父程序結束,子程序未結束,那麼子程序就是乙個孤兒程序,孤兒程序會被系統的init程序接管。

在父程序中呼叫系統方法

注:1、系統呼叫執行流程

①將系統呼叫號儲存到eax暫存器中

②觸發ox80中斷,系統核心執行中斷處理程式

③根據eax中的系統呼叫號呼叫對應的核心方法sys_***x

④通過eax暫存器返回核心方法執行的結果,一般都是整型值

2 、庫函式和系統呼叫的區別:

庫函式:呼叫在使用者態,實現也在使用者態,但是有可能需要轉調系統呼叫

系統呼叫:呼叫在使用者態(許可權相對較小),實現在核心態(計算機上的最高許可權)。

一:呼叫pid_t wait(int *status),如果不關注子程序的退出狀態,則status可以傳遞乙個null,呼叫時,實參時傳遞乙個變數的位址,返回子程序的退出狀態。

wait方法會阻塞呼叫這個方法的程序,直到有乙個子程序結束,如果當前程序沒有子程序,則wait呼叫失敗,返回-1。乙個父程序可能會存在多個子程序,而一次wait呼叫只能處理乙個子程序。

int val =0;

int id =

wait

(&val);if

(wifexited

(val)

)

二:利用訊號來解決

#include

#include

#include

#include

#include

void

sig(

)int

main()

else

exit(0);}

自定義該函式,在子程序退出後會給父程序傳送sigchld訊號,就會觸發該函式,在該函式中呼叫wait函式進行等待,則就會將預防殭屍程序的產生。

void

sig(

)

linux僵死程序

乙個程序在呼叫exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下乙個稱為僵死程序 zombie 的資料結構 系統呼叫exit,它的作用是使程序退出,但也僅僅限於將乙個正常的程序變成乙個僵死程序,並不能將其完全銷毀 一 僵死程序的產生 在每個程序退出的時候,核心釋放該程序所有的資源,...

linux僵死程序

乙個程序在呼叫exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下乙個稱為僵死程序 zombie 的資料結構 系統呼叫exit,它的作用是使程序退出,但也僅僅限於將乙個正常的程序變成乙個僵死程序,並不能將其完全銷毀 一 僵死程序的產生 在每個程序退出的時候,核心釋放該程序所有的資源,...

Linux 僵死程序

僵死程序的產生 1.當父程序未結束,子程序結束,並且父程序未獲取子程序的退出狀態。子程序被稱為僵死程序。2.程序執行結束,程序主體 執行 資料 資源 都釋放,而其pcb 並未釋放。3.孤兒程序 父程序死後僵死程序成為 孤兒程序 由init接管 include include include incl...