父程序通過fork函式建立子程序,轉殖fork函式之後的**到子程序。父程序中fork返回子程序id,子程序中返回0
#include#includeint gval = 10;
int main(int argc,char *argv)
殭屍程序,即父程序沒有向子程序獲取到exit或者return返回的值,因此在父程序結束之前,子程序為殭屍程序
如下程式:
#include#includeint main(int argc,char argv)
//此時檢視系統程序資訊,子程序的id存在
if(pid == 0)
puts("end child process\n");
else
puts("end parent process\n");
return 0; //此時再檢視,子程序消失
}
父程序通過呼叫wait函式獲取子程序返回值來結束殭屍程序,在子程序結束前,該函式阻塞
成功返回id,失敗返回-1
pid_t wait(int * statloc);
需要通過以下另個巨集分離statloc引數
wifexited:子程序是否正常退出,是則為1
wexitstatus:子程序id
#include#include#include#includeint main(int argc,char argv)
} return 0;
}
waitpid函式是對wait函式的改進,在子程序結束前它不會阻塞:
pid_t waitpid(pid_t pid,int* statloc,int options);
pid為等待終止的程序id,
statloc同wait
option為常量wnohang,即沒有終止的子程序也不會阻塞,而是return 0
訊號處理signal函式
該函式作用:當父程序發現子程序終止時,請求作業系統呼叫特定的函式處理,即訊號註冊函式。
#include#include#includevoid timeout(int sig)
void keycontrol(int sig)
int main(int argc,char argv)
return 0;
}
更穩定的sigaction函式,用法同signal
#include#include#include#include#includevoid read_childproc(int sig)
}int main(int argc,int *argv)
else
else
}} return 0;
}
函式指標的使用:
#includevoid cal(int a,int b)
void print(void (*func)(int,int),int x,int y)//第乙個引數為函式指標,該指標要求所致函式引數為兩個整型,返回值為void,固定格式type (*function)(type,type...)
int main(int argc,int argv)
linux環境程式設計 孤兒程序,殭屍程序,守護程序
前面的 程序控制我們已經陸續的介紹啦,今天介紹一下孤兒程序,殭屍程序,還有守護程序 一.孤兒程序 父程序 先於 子程序結束,那子程序就成為了孤兒程序,父程序的資源被 init程序 沒有結束的子程序就被init程序領養,init程序可以被看程是孤兒院的院長。二.殭屍程序 父程序 還在執行 子程序已經結...
防止殭屍程序的產生
apue的 直接貼這裡。這段 採用了兩次fork,來避免產生殭屍程序。當乙個程序的父程序先退出,該程序就由init程序接管。init程序就成為了該程序的父程序 該程序退出時,有init來清理。所以該程序就不會成為殭屍程序了。include include include include intmai...
防止殭屍程序的方法
1.每次執行fork 前利用waitpid檢視是否有子程序需要處理 2.呼叫signal sigchld,fun 註冊訊號處理函式,在函式裡呼叫waitpid void fun int 3.利用 sigaction 結構體 struct sigaction act,oldset 設定訊號性質的結構體...