步骤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 }
浙公网安备 33010602011771号