美文网首页
【虚拟机】 get 软中断通信

【虚拟机】 get 软中断通信

作者: 秣禾 | 来源:发表于2020-06-10 17:01 被阅读0次

    实验目的

    1、简单了解掌握软中断通信的定义知识。

    2、了解什么是信号。

    3、了解Linux系统环境下进程之间软中断通信的基本原理。

    实验任务

    (1)使用系统调用fork()创建两个子进程
    (2)再用系统调用signal()让父进程捕捉键盘上发出的中断信号Ctrl+C
    (3)当父进程接收到这两个软中断的某一个后,父进程用系统调用kill()向两个子进程分别发送软中断信号
    (4)子进程捕捉到软中断信号,然后分别输出下列信息后终止:
    Child process 1 is killed by parent !!
    Child process 2 is killed by parent !!
    (5)父进程调用wait()函数等待两个子进程终止后,输入以下信息,结束进程执行:
    Parent process is killed!!

    实验内容

    #include<stdio.h>
    #include<unistd.h>
    #include<sys/types.h>
    #include<sys/wait.h>
    #include<signal.h>
    #include<stdlib.h>
    int wait_flag;
    void stop();
    int main()
    {
        int pid1,pid2;
        signal(2,stop);
        pause();
        while((pid1 = fork())== -1);
        if(pid1 > 0)
        {
          while((pid2 = fork()) == -1 );
          if(pid2 > 0)
          {
            wait_flag= 1;
            sleep(5);
            kill(pid1, 16);
            kill(pid2,17);
            wait(0);
            wait(0);
            printf("\nparent process is killed!!\n");
            exit(0);
          }
          else
          {
            wait_flag= 1;
            signal(17,stop);
            printf("\nchild process 2 is killed by parent!!\n");
            exit(0);
          }
        }
        else
        {
          wait_flag= 1;
          signal(16,stop);
          printf("\nchild process 1 is killed by parent!!\n");
        }
        }
     void stop()
    {
        wait_flag = 0;
    }
    

    实验结果及分析

    软中断通信
    1、系统调用kill(pid,sig)和signal(sig,func)被用来传递和接收软中断信号,进程号为pid的通过,signal(sig,func)捕捉到信号sig之后,执行预约的动作func,从而达到这两个进程的通信目的。
    2、上述程序中,signal( )都放在一段程序的前面部位,而不是在其他接收信号处。这是因为signal( )的执行只是为进程指定信号值16或17的作用,以及分配相应的与stop( )过程链接的指针。因而,signal( )函数必须在程序前面部分执行。
    3、先预设中断信号,创建子进程pid1、pid2,预设两个进程的中断信号,在按下Ctrl+C时,父进程向两个子进程发送中断信号,子进程捕捉到信号后输出相应信息,完成后终止,最后按Ctrl+C输出“parent process is killed!!”终止。

    相关文章

      网友评论

          本文标题:【虚拟机】 get 软中断通信

          本文链接:https://www.haomeiwen.com/subject/aghgzhtx.html