11a2eaa40Slogin /** 21a2eaa40Slogin * @file main.c 31a2eaa40Slogin * @author longjin (longjin@RinGoTek.cn) 41a2eaa40Slogin * @brief 测试signal用的程序 51a2eaa40Slogin * @version 0.1 61a2eaa40Slogin * @date 2022-12-06 71a2eaa40Slogin * 81a2eaa40Slogin * @copyright Copyright (c) 2022 91a2eaa40Slogin * 101a2eaa40Slogin */ 111a2eaa40Slogin 121a2eaa40Slogin /** 131a2eaa40Slogin * 测试signal的kill命令的方法: 141a2eaa40Slogin * 1.在DragonOS的控制台输入 exec bin/test_signal.elf & 151a2eaa40Slogin * 请注意,一定要输入末尾的 '&',否则进程不会后台运行 161a2eaa40Slogin * 2.然后kill对应的进程的pid (上一条命令执行后,将会输出这样一行:"[1] 生成的pid") 171a2eaa40Slogin * 181a2eaa40Slogin */ 191a2eaa40Slogin 2064aea4b3SGou Ngai #include <signal.h> 213c82aa56SChiichen #include <stdbool.h> 22*bc6f0a96S裕依 #include <stdio.h> 23*bc6f0a96S裕依 #include <unistd.h> 24*bc6f0a96S裕依 256efd4740Slogin bool handle_ok = false; 263c82aa56SChiichen int count = 0; handler(int sig)276efd4740Sloginvoid handler(int sig) 286efd4740Slogin { 296efd4740Slogin printf("handle %d\n", sig); 306efd4740Slogin handle_ok = true; 313c82aa56SChiichen count++; 326efd4740Slogin } 336efd4740Slogin main()341a2eaa40Sloginint main() 351a2eaa40Slogin { 366efd4740Slogin signal(SIGKILL, &handler); 376efd4740Slogin printf("registered.\n"); 386efd4740Slogin 391a2eaa40Slogin while (1) 401a2eaa40Slogin { 413c82aa56SChiichen // handler(SIGKILL); 423c82aa56SChiichen printf("Test signal running\n"); 433c82aa56SChiichen raise(SIGKILL); 446efd4740Slogin if (handle_ok) 456efd4740Slogin { 466efd4740Slogin printf("Handle OK!\n"); 476efd4740Slogin handle_ok = false; 481a2eaa40Slogin } 493c82aa56SChiichen if (count > 0) 503c82aa56SChiichen { 513c82aa56SChiichen signal(SIGKILL, SIG_DFL); 523c82aa56SChiichen } 536efd4740Slogin } 546efd4740Slogin 551a2eaa40Slogin return 0; 561a2eaa40Slogin }