#pragma once #include #if defined(__cplusplus) extern "C" { #endif #define SIGHUP 1 #define SIGINT 2 #define SIGQUIT 3 #define SIGILL 4 #define SIGTRAP 5 #define SIGABRT 6 #define SIGIOT 6 #define SIGBUS 7 #define SIGFPE 8 #define SIGKILL 9 #define SIGUSR1 10 #define SIGSEGV 11 #define SIGUSR2 12 #define SIGPIPE 13 #define SIGALRM 14 #define SIGTERM 15 #define SIGSTKFLT 16 #define SIGCHLD 17 #define SIGCONT 18 #define SIGSTOP 19 #define SIGTSTP 20 #define SIGTTIN 21 #define SIGTTOU 22 #define SIGURG 23 #define SIGXCPU 24 #define SIGXFSZ 25 #define SIGVTALRM 26 #define SIGPROF 27 #define SIGWINCH 28 #define SIGIO 29 #define SIGPOLL SIGIO #define SIGPWR 30 #define SIGSYS 31 /* These should not be considered constants from userland. */ #define SIGRTMIN 32 #define SIGRTMAX MAX_SIG_NUM typedef void (*__sighandler_t)(int); #define SIG_DFL ((__sighandler_t)0) /* Default action. */ #define SIG_IGN ((__sighandler_t)1) /* Ignore signal. */ // 注意,该结构体最大16字节 union __sifields { /* kill() */ struct { pid_t _pid; /* 信号发送者的pid */ } _kill; }; // 注意,该结构体最大大小为32字节 #define __SIGINFO \ struct \ { \ int32_t si_signo; /* signal number */ \ int32_t si_code; \ int32_t si_errno; \ uint32_t reserved; /* 保留备用 */ \ union __sifields _sifields; \ } typedef struct { union { __SIGINFO; uint64_t padding[4]; // 让siginfo占用32字节大小 }; } siginfo_t; typedef struct { uint64_t set; } sigset_t; struct sigaction { // sa_handler和sa_sigaction二选1 __sighandler_t sa_handler; void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; uint64_t sa_flags; void (*sa_restorer)(void); }; int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); int signal(int signum, __sighandler_t handler); int raise(int sig); int kill(pid_t, int sig); #if defined(__cplusplus) } /* extern "C" */ #endif