结构体 | |
struct | sigset_t_l |
struct | sigactq |
struct | sq_entry_s |
struct | sigpendq |
struct | sq_queue_s |
struct | SigInfoListNode |
struct | sig_cb |
信号控制块(描述符) 更多... | |
类型定义 | |
typedef void(* | sa_sighandler_t) (int) |
typedef void(* | sa_siginfoaction_t) (int, siginfo_t *, void *) |
typedef struct sigaction | sigaction_t |
typedef struct sigactq | sigactq_t |
typedef struct sq_entry_s | sq_entry_t |
typedef struct sigpendq | sigpendq_t |
typedef struct sq_queue_s | sq_queue_t |
typedef struct SigInfoListNode | SigInfoListNode |
函数 | |
static int | GOOD_SIGNO (unsigned int sig) |
信号ID是否有效 更多... | |
int | sys_sigqueue (pid_t, int, const union sigval) |
int | sys_sigpending (sigset_t *) |
int | sys_rt_sigtimedwait (const sigset_t *mask, siginfo_t *si, const struct timespec *ts, size_t sigsetsize) |
int | sys_sigsuspend (const sigset_t *) |
int | OsKillLock (pid_t pid, int sig) |
给发送信号过程加锁 更多... | |
int | OsSigAction (int sig, const sigaction_t *act, sigaction_t *oact) |
int | OsSigprocMask (int how, const sigset_t_l *set, sigset_t_l *oldset) |
int | OsPthreadKill (UINT32 tid, int signo) |
发送信号 更多... | |
int | OsSigEmptySet (sigset_t *) |
信号集全部清0 更多... | |
int | OsSigAddSet (sigset_t *, int) |
向信号集中加入signo信号 更多... | |
int | OsSigIsMember (const sigset_t *, int) |
判定信号signo是否存在信号集中。如果信号集里已有该信号则返回1,否则返回0。如果有错误则返回-1 更多... | |
int | OsKill (pid_t pid, int sig, int permission) |
int | OsDispatch (pid_t pid, siginfo_t *info, int permission) |
信号分发,发送信号权限/进程组过滤. 更多... | |
int | OsSigTimedWait (sigset_t *set, siginfo_t *info, unsigned int timeout) |
让当前任务等待的信号 更多... | |
int | OsPause (void) |
通过信号挂起当前任务 更多... | |
int | OsSigPending (sigset_t *set) |
获取阻塞当前任务的信号集 更多... | |
int | OsSigSuspend (const sigset_t *set) |
用参数set代替进程的原有掩码,并暂停进程执行,直到收到信号再恢复原有掩码并继续执行进程。 更多... | |
VOID | OsSigIntLock (VOID) |
VOID | OsSigIntUnlock (VOID) |
INT32 | OsTaskKillUnsafe (UINT32 taskID, INT32 signo) |
VOID | OsClearSigInfoTmpList (sig_cb *sigcb) |
信号是Linux系统中用于进程间互相通信或者操作的一种机制,信号可以在任何时候发给某一进程,而无需知道该进程的状态。 如果该进程当前并未处于执行状态,则该信号就由内核保存起来,直到该进程被调度执行并传递给它为止。 如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟, 在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中异步通信机制, 一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程 发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。 信号量定义如下: 见于..\third_party\musl\arch\aarch64\bits\signal.h #define SIGHUP 1 //终端挂起或者控制进程终止 #define SIGINT 2 //键盘中断(如break键被按下) #define SIGQUIT 3 //键盘的退出键被按下 #define SIGILL 4 //非法指令 #define SIGTRAP 5 //跟踪陷阱(trace trap),启动进程,跟踪代码的执行 #define SIGABRT 6 //由abort(3)发出的退出指令 #define SIGIOT SIGABRT //abort发出的信号 #define SIGBUS 7 //总线错误 #define SIGFPE 8 //浮点异常 #define SIGKILL 9 //常用的命令 kill 9 123 | 不能被忽略、处理和阻塞 #define SIGUSR1 10 //用户自定义信号1 #define SIGSEGV 11 //无效的内存引用, 段违例(segmentation violation),进程试图去访问其虚地址空间以外的位置 #define SIGUSR2 12 //用户自定义信号2 #define SIGPIPE 13 //向某个非读管道中写入数据 #define SIGALRM 14 //由alarm(2)发出的信号,默认行为为进程终止 #define SIGTERM 15 //终止信号, kill不带参数时默认发送这个信号 #define SIGSTKFLT 16 //栈溢出 #define SIGCHLD 17 //子进程结束信号 #define SIGCONT 18 //进程继续(曾被停止的进程) #define SIGSTOP 19 //终止进程 | 不能被忽略、处理和阻塞 #define SIGTSTP 20 //控制终端(tty)上 按下停止键 #define SIGTTIN 21 //进程停止,后台进程企图从控制终端读 #define SIGTTOU 22 //进程停止,后台进程企图从控制终端写 #define SIGURG 23 //I/O有紧急数据到达当前进程 #define SIGXCPU 24 //进程的CPU时间片到期 #define SIGXFSZ 25 //文件大小的超出上限 #define SIGVTALRM 26 //虚拟时钟超时 #define SIGPROF 27 //profile时钟超时 #define SIGWINCH 28 //窗口大小改变 #define SIGIO 29 //I/O相关 #define SIGPOLL 29 // #define SIGPWR 30 //电源故障,关机 #define SIGSYS 31 //系统调用中参数错,如系统调用号非法 #define SIGUNUSED SIGSYS //系统调用异常 #define _NSIG 65 //信号范围,不超过_NSIG https://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html Musl官网 http://musl.libc.org/ musl是构建在Linux系统调用API之上的C标准库的实现,包括在基本语言标准POSIX中定义的接口, 以及广泛认可的扩展。musl是轻量级的,快速的,简单的,自由的. *
pathname |
在文件 los_signal.h 中定义.
在文件 los_signal.h 第 151 行定义.
在文件 los_signal.h 第 152 行定义.
typedef struct sigaction sigaction_t |
在文件 los_signal.h 第 186 行定义.
在文件 los_signal.h 第 193 行定义.
typedef struct SigInfoListNode SigInfoListNode |
typedef struct sigpendq sigpendq_t |
在文件 los_signal.h 第 205 行定义.
typedef struct sq_entry_s sq_entry_t |
在文件 los_signal.h 第 198 行定义.
typedef struct sq_queue_s sq_queue_t |
在文件 los_signal.h 第 211 行定义.
VOID OsClearSigInfoTmpList | ( | sig_cb * | sigcb | ) |
在文件 los_signal.c 第 123 行定义.
信号分发,发送信号权限/进程组过滤.
在文件 los_signal.c 第 412 行定义.
用于向进程或进程组发送信号 shell命令 kill 14 7(kill -14 7效果相同) 发送信号14(SIGALRM默认行为为进程终止)给7号进程 *
在文件 los_signal.c 第 450 行定义.
通过信号挂起当前任务
在文件 los_signal.c 第 617 行定义.
int OsSigAction | ( | int | sig, |
const sigaction_t * | act, | ||
sigaction_t * | oact | ||
) |
信号安装,函数用于改变进程接收到特定信号后的行为。 sig:信号的值,可以为除SIGKILL及SIGSTOP外的任何一个特定有效的信号(为这两个信号定义自己的处理函数,将导致信号安装错误)。 act:设置对signal信号的新处理方式。 oldact:原来对信号的处理方式。 如果把第二、第三个参数都设为NULL,那么该函数可用于检查信号的有效性。 返回值:0 表示成功,-1 表示有错误发生。 *
在文件 los_signal.c 第 677 行定义.
向信号集中加入signo信号
在文件 los_signal.c 第 527 行定义.
int OsSigEmptySet | ( | sigset_t * | set | ) |
VOID OsSigIntLock | ( | VOID | ) |
在文件 los_signal.c 第 704 行定义.
VOID OsSigIntUnlock | ( | VOID | ) |
在文件 los_signal.c 第 712 行定义.
判定信号signo是否存在信号集中。如果信号集里已有该信号则返回1,否则返回0。如果有错误则返回-1
set | |
signo |
在文件 los_signal.c 第 62 行定义.
int OsSigPending | ( | sigset_t * | set | ) |
获取阻塞当前任务的信号集
在文件 los_signal.c 第 541 行定义.
int OsSigprocMask | ( | int | how, |
const sigset_t_l * | setl, | ||
sigset_t_l * | oldsetl | ||
) |
向信号集设置信号屏蔽的方法 SIG_BLOCK:将set指向信号集中的信号,添加到进程阻塞信号集; SIG_UNBLOCK:将set指向信号集中的信号,从进程阻塞信号集删除; SIG_SETMASK:将set指向信号集中的信号,设置成进程阻塞信号集; *
在文件 los_signal.c 第 233 行定义.
int OsSigSuspend | ( | const sigset_t * | set | ) |
用参数set代替进程的原有掩码,并暂停进程执行,直到收到信号再恢复原有掩码并继续执行进程。
在文件 los_signal.c 第 627 行定义.
在文件 los_signal.c 第 490 行定义.
int sys_rt_sigtimedwait | ( | const sigset_t * | mask, |
siginfo_t * | si, | ||
const struct timespec * | ts, | ||
size_t | sigsetsize | ||
) |
int sys_sigpending | ( | sigset_t * | ) |
int sys_sigsuspend | ( | const sigset_t * | ) |