LINUX下子程序與防止殭屍程序(函式指標的使用)

2021-08-02 01:27:31 字數 1707 閱讀 8560

父程序通過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 設定訊號性質的結構體...