Chiichen 3c82aa56d1
Signal refactor (#402)
* 初步完成对 signal_types 和 部分signal代码的初始化

* 重构了一部分架构相关代码进入 arch 中

* 基本修改完成,编译通过,后续补上系统调用

* signal基本完成,能实现 Sigaction 系统调用

* 增加了一组枚举抽象

* 进一步重构了一部分C风格的代码

* 继续重构了一部分C风格代码

* 继续完善了一部分逻辑

* 修改了部分代码逻辑

* 补充了 fork 中复制信号信息的逻辑

* 修复了 kallsysms 未转义引号的问题

* 修复了无法跳转到 sigreturn 的bug

* 调通了 signal

* 实现了 signal 架构抽象层的 trait

* 为信号提供了默认处理函数

* 基本完成了 signal 的大体逻辑

* 修复了 Sigreturn 的一个小错误,格式化

* 修复了一个编译器漏报错误

* 删除了多余的代码

* 修改测试程序为链接 relibc

* 修复了信号处理过程中浮点寄存器错误保存的问题

* 修复了一个结构体错误引起的无法在relibc下正确运行的错误

* 修复了链接 relibc 时无法正常从信号处理返回的 bug

* 修复了 signal 处理流程中 rsp 指针错误导致的浮点运算触发GP

* 修复了一个死锁问题,解决了默认处理函数无法进入调度导致的bug

* 修复了一些错误

* 修改了 relibc 依赖版本号

* 删除了多余的 imports

* 删除一些debug日志

* 删除内核 signal.h 文件

* 删除一个依赖项

* 删除了 binding 相关依赖项
2023-10-24 12:02:20 +08:00

58 lines
1.1 KiB
C

/**
* @file main.c
* @author longjin (longjin@RinGoTek.cn)
* @brief 测试signal用的程序
* @version 0.1
* @date 2022-12-06
*
* @copyright Copyright (c) 2022
*
*/
/**
* 测试signal的kill命令的方法:
* 1.在DragonOS的控制台输入 exec bin/test_signal.elf &
* 请注意,一定要输入末尾的 '&',否则进程不会后台运行
* 2.然后kill对应的进程的pid (上一条命令执行后,将会输出这样一行:"[1] 生成的pid")
*
*/
#include <math.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <stdbool.h>
bool handle_ok = false;
int count = 0;
void handler(int sig)
{
printf("handle %d\n", sig);
handle_ok = true;
count++;
}
int main()
{
signal(SIGKILL, &handler);
printf("registered.\n");
while (1)
{
// handler(SIGKILL);
printf("Test signal running\n");
raise(SIGKILL);
if (handle_ok)
{
printf("Handle OK!\n");
handle_ok = false;
}
if (count > 0)
{
signal(SIGKILL, SIG_DFL);
}
}
return 0;
}