通過訊號量進行程序通訊的小例子
阿新 • • 發佈:2018-12-12
如果我們需要完成以下的要求
在main函式中建立一個子程序實現通訊:利用訊號實現程序通訊。
父程序任務:迴圈列印“I am father process!,I am waiting for signal,My PID is ......”。要求把自己的程序號同時打印出來,父程序同時還等待發來的SIGINT訊號和SIGKILL訊號,當第一次收到SIGINT訊號時,列印“I have received SIGINT signal”,但此時不退出,繼續迴圈執行;當收到子程序利用kill函式發來的SIGKILL訊號時,則終止程序。
子程序任務:迴圈列印“I am son process !”。5秒鐘之後,子程序向父程序利用kill函式傳送SIGKILL訊號。在此期間,若父程序收到SIGINT訊號,則列印“I have received SIGINT signal”。
則所需要的程式程式碼如下
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <signal.h> int pid; void ouch1(int sig) { kill(pid,SIGKILL); alarm(5); } void ouch2(int sig) { printf("I recived SIGINT\n"); } void ouch3(int sig) { } void main() { int n,fd[2]; int i; if (pipe(fd) < 0) return 1; if ((pid=fork()) < 0) return 1; else if (pid == 0) //ZI程序 { alarm(5); signal(SIGALRM, ouch1); signal(SIGINT,ouch2); while(1) { printf("I am son process !\n"); sleep(1); } } else //FU程序 { signal(SIGINT,ouch2); signal(SIGKILL,SIG_DFL); while(1) { printf("I am father process!,I am waiting for signal,My PID is %d\n",getpid()); sleep(2); } }