殭屍程序的處理

2021-10-07 20:09:09 字數 2283 閱讀 2771

利用kill函式

利用sigchld訊號

kill函式可以向某個程序或者程序組傳送特定的訊號。

#include

#include

intkill

(pid_t pid,

int sig)

;

#include

#include

#include

void

fun(

int sig)

intmain()

}getchar()

;}

wait

waitpid

標頭檔案#include #include

#include #include

宣告pid_t wait(int *status);

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

區別如果父程序的所有子程序都還在執行,呼叫wait將使父程序阻塞。

呼叫waitpid時如果在options引數中指定wnohang可以使父程序不阻塞而立即返回0。

wait等待第乙個終止的子程序

waitpid可以通過pid引數指定等待哪乙個子程序。

作用可以獲得子程序的終止資訊

父程序阻塞等待子程序終止,起到程序間同步的作用

使用如果引數status不是空指標,則子程序的終止資訊通過這個引數傳出

如果只是為了同步而不關心子程序的終止資訊,可以將status引數指定為null。

waitpid的option常量常量

說明wcontinued

若實現支援作業控制.那麼由pid指定的任一子程序在暫停後已經繼續,但其狀態尚未報告,則返回其狀態(posix.l 的xsi擴充套件)

wnohang

若由pid指定的子程序並不是立即可用的,則waitpid不阻塞,此時其返回值為0

wuntraced

若某實現支援作業控制,而由pid指定的任一子程序已處千暫停狀態,並且其狀態自暫停以來還未報告過.則返回其狀態。wifstopped巨集確定返回值是否對應於乙個暫停子程序

檢查wait和waitpid所返回的終止狀態的巨集巨集

說明wifexited (status)

若為正常終止子程序返回的狀態,則為真。對千這種情況可執行wexitstatus(status), 取子程序傳送給exit、_exit或_exit引數的低8位

wifsignaled (status)

若為異常終止子程序返回的狀態,則為真(接到乙個不捕捉的訊號)。對千這種情況,可執行wtermsig (status), 取使子程序終止的訊號編號。另外,有些實現(非single unix specification) 定義巨集wcoredump (status) , 若已產生終止程序的core檔案,則它返回真

wifstopped (status)

若為當前暫停子程序的返回的狀態,則為真。對千這種情況,可執行wstopsig(status), 取使子程序暫停的訊號編號

wifcontinued (status)

若在作業控制暫停後已經繼續的子程序返回了狀態,則為真。(posix.l 的xsi擴充套件,僅用千waitpid過。)

#include

#include

#include

#include

#include

void

fun(

int sig)

intmain()

sleep(1

);//這個一定要加,不然多個子程序幾乎同時產生並退出,發出多個sigchld訊號,而sigchld是不可靠訊號。父程序來不及乙個乙個地響應,所以最後父程序實際上只執行了一次或兩次訊號處理函式。但執行一次訊號處理函式只等待乙個子程序退出,所以最後會有一些子程序依然是殭屍程序。

}printf

("press enter to exit...");

getchar()

;}

#include

#include

#include

#include

#include

void

fun(

int sig)

intmain()

}printf

("press enter to exit...");

getchar()

;}

殭屍程序 處理

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

殭屍程序的處理

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

Linux下殭屍程序的處理

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