Linux進程間軟中斷通信

實現過程:

  1. 使用系統調用fork創建兩個子進程
  2. 用系統調用signal()讓父進程捕捉鍵盤上的中斷信號(Ctrl+C或者Ctrl + )
  3. 捕捉到中斷信號後,父進程調用系統調用Kill殺死兩個子進程
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<signal.h>
#include<sys/types.h>
#include<sys/wait.h>

pid_t pid1,pid2;
void CallKill(int a)
{
        kill(pid1,20);
        kill(pid2,21);
}
void Child_1()
{
        printf("Child Process1 is Killed by Parent!\r\n");
        exit(0);
}
void Child_2()
{
        printf("Child Process2 is Killed by Parent!\r\n");
        exit(0);
}
int main()
{
       pid1 = fork();
       if(pid1 == 0)
       {
                //signal(SIGINT,SIG_IGN);//忽略收到的中斷指令
                signal(SIGQUIT,SIG_IGN);
                signal(20,Child_1);//註冊中斷信號對應的函數指針
                sleep(5);//切換進程
       }
       else
       {
                pid2 = fork();
                if(pid2 == 0)
                {
                        //signal(SIGINT,SIG_IGN);
                        signal(SIGQUIT,SIG_IGN);
                        signal(21,Child_2);//註冊中斷信號對應的函數指針
                        sleep(5);
                }
                else
                {
                        //signal(SIGINT,CallKill);
                        signal(SIGQUIT,CallKill);
                        sleep(10);//切換到子進程去執行
                        wait(0);//等待子進程全部推出
                        wait(0);
                        printf("Parent Process is Killed\r\n");
                        exit(0);
                }
       }
       return 0;
}
                        

在這裏插入圖片描述
在這裏插入圖片描述
初接觸linux的實驗記錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章