殭屍程序的處理

2021-07-02 00:57:10 字數 1248 閱讀 2410

在unix 系統中,乙個程序結束了,但是他的父程序沒有等待(呼叫wait / waitpid)他, 那麼他將變成乙個殭屍程序. 在fork()/execve()過程中,假設子程序結束時父程序仍存在,而父程序fork()之前既沒安裝sigchld訊號處理函式呼叫 waitpid()等待子程序結束,又沒有顯式忽略該訊號,則子程序成為殭屍程序。

兩種方法殺死殭屍程序,一般殭屍程序很難直接kill掉,不過您可以kill殭屍父程序。父程序死後,殭屍程序成為」孤兒程序」,過繼給1號程序init,init始終會負責清理殭屍程序.它產生的所有殭屍程序也跟著消失。

(1)利用wait,waitpid函式來主動請求子程序的函式

* wait,waitpid函式

pid_t wait(int

*status);

pid_t waitpid(pid_t pid, int

*status, int options);

(2)利用sigaction函式進行訊號處理,通過註冊子程序觸發的sigchld訊號來

編寫相應的處理函式。

* 訊號sigaction函式和sigaction結構體結構

int sigaction(int sig, const

struct sigaction *restrict act, struct sigaction *restrict oact);

struct sigaction

;

act是新的訊號處理函式,oact是舊的處理函式一般為null

* **案例如下:

#include

#include

#include

#include

#include

#include

#include

#include

void handle(int signum)

}int main(int argc,char** argv)

std::cout

<<"wait!"

num--;

}}

其實最直接的方法下面**就可以做到**

void handle_child()

子程序終止的時候產生sigchld訊號,系統會用sig_ign函式來進行預設處理,

所以正常情況下只需要設定上面的**就可以了。

殭屍程序 處理

由於使用fork建立的子程序被kill以後,父程序沒有kill時,用ps檢視就會顯示該子程序 為殭屍程序。開始沒有設定signal sigchld,sig ign 然後在程式裡用system kill s 9 表示子程序號 執行之後發現子程序顯示為殭屍程序。但是直接在後台執行 kill s 9 再次...

殭屍程序的處理

利用kill函式 利用sigchld訊號 kill函式可以向某個程序或者程序組傳送特定的訊號。include include intkill pid t pid,int sig include include include void fun int sig intmain getchar wait...

Linux下殭屍程序的處理

category 工作學習 linux 2010.12.31 什麼是殭屍程序 殭屍程序是指它的父程序已經退出 父程序沒有等待 呼叫wait waitpid 它 而該程序dead之後沒有程序接受,就成為殭屍程序,也就是 zombie 程序。殭屍程序是怎麼樣產生 乙個程序在呼叫exit命令結束自己的生命...