步骤1:同上

步骤2:建立目录

  cd workdir/linux/application/10-comm/

  mkdir signal

  cd signal/

步骤3:复制

  cp /mnt/hgfs/share/2.\ Linux系统部分/14.\ Linux系统信号机制实验/实验代码/signal.c ./ -a

步骤4:执行

  gcc signal.c -o signal

  ./signal

  系统调用signal()让父进程捕捉键盘上的中断信号(即按Ctrl + c),当捕捉到中断信号后父进程调用kill()向两个子进程发出信号,子进程捕捉到父进程发来的信号后,输出上述信息。

附:程序源码

  

 1 #include<stdio.h>
 2 #include<signal.h>
 3 #include<unistd.h>
 4 #include<stdlib.h>
 5 
 6 int wait_mark;
 7 void waiting(), stop();
 8 
 9 int main(int argc, char *argv[])
10 {  
11     int  p1, p2;
12     signal(SIGINT,stop);
13 
14     while((p1 = fork()) == -1);
15 
16     if (p1 > 0)                            /*在父进程中*/
17     {
18         while((p2 = fork()) == -1);
19 
20         if (p2 > 0)                    /*在父进程中*/
21         {
22             wait_mark = 1;
23             waiting();
24             kill(p1, 10);
25             kill(p2, 12);
26             wait(NULL);
27             wait(NULL);
28             printf("parent process exit!\n");
29             exit(0);
30         }
31         else                        /*在子进程2中*/
32         {
33             wait_mark = 1;
34             signal(12, stop);
35             waiting();
36             lockf(1, 1, 0);
37             printf("child process 2 is killed by parent!\n");
38             lockf(1, 0, 0);
39             exit(0);
40         }
41     } 
42     else                                /*在子进程1中*/
43     {
44         wait_mark = 1;
45         signal(10, stop);
46         waiting();
47         lockf(1, 1, 0);
48         printf("child process 1 is killed by parent!\n");
49         lockf(1, 0, 0);
50         exit(0);
51     }
52 }
53 
54 void waiting()
55 {
56     while(wait_mark != 0);
57 }
58 
59 void stop()
60 {
61     wait_mark = 0;
62 }

 

posted on 2018-08-02 21:31  kingofloong  阅读(635)  评论(0)    收藏  举报