利用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命令結束自己的生命...