xref: /DragonOS/user/apps/test_signal/main.c (revision f9fe30be89e89499aad4ef52b4648986bef5a7d8)
1 /**
2  * @file main.c
3  * @author longjin (longjin@RinGoTek.cn)
4  * @brief 测试signal用的程序
5  * @version 0.1
6  * @date 2022-12-06
7  *
8  * @copyright Copyright (c) 2022
9  *
10  */
11 
12 /**
13  * 测试signal的kill命令的方法:
14  * 1.在DragonOS的控制台输入 exec bin/test_signal.elf &
15  *      请注意,一定要输入末尾的 '&',否则进程不会后台运行
16  * 2.然后kill对应的进程的pid (上一条命令执行后,将会输出这样一行:"[1] 生成的pid")
17  *
18  */
19 
20 #include <signal.h>
21 #include <stdbool.h>
22 #include <stdio.h>
23 #include <unistd.h>
24 
25 bool handle_ok = false;
26 int count = 0;
27 void handler(int sig)
28 {
29     printf("handle %d\n", sig);
30     handle_ok = true;
31     count++;
32 }
33 
34 int main()
35 {
36     signal(SIGKILL, &handler);
37     printf("registered.\n");
38 
39     while (1)
40     {
41         // handler(SIGKILL);
42         printf("Test signal running\n");
43         raise(SIGKILL);
44         if (handle_ok)
45         {
46             printf("Handle OK!\n");
47             handle_ok = false;
48         }
49         if (count > 0)
50         {
51             signal(SIGKILL, SIG_DFL);
52         }
53     }
54 
55     return 0;
56 }