linux网络编程-进程间通信——信号

信号是进程间通信的方式之一,进程之间通过发送和接收不同的值来通信,这些不同的值被标示为各种信号。

我们使用kill指令杀死一个进程,本质上是kill这个程序给对应的进程发送了一个进程终止的信号SIGTERM。通过kill -l可以查看系统默认的信号。 

1、接收信号:

 1 //main.c
 2 #include <stdio.h>
 3 #include <signal.h>
 4 
 5 int end = 0;
 6 
 7 static void sig_handle(int signo)
 8 {
 9     switch(signo)
10     {
11         case SIGTERM:
12        printf("收到信号SIGTERM, value = %d\n", signo);
13        break;
14         
15        default:
16        printf("收到其他信号,value=%d\n", signo);
17        break;
18     }
19     end = 1;
20     return;
21 }
22 
23 int main(int argc, char **argv) 
24 {
25     sighandler_t ret;
26     ret = signal(SIGTERM, sig_handle);
27     if(SIG_ERR==ret)
28     {
29        printf("为SIGTERM挂接信号处理函数失败\n");
30        return -1;
31     }
32     printf("开始监听信号...\n");
33     while(1)
34     {
35        if(1==end)
36            return 0;
37     }
38 }

 2、编译

gcc -D_GNU_SOURCE main.c

3、测试

  执行./a.out,并另启终端执行pkill -15 a.out;

  可以看到进程收到信号并打印:收到信号SIGTERM, value = 15

 

posted @ 2022-12-19 19:54  Parker_Zhou  阅读(50)  评论(0)    收藏  举报