函数 | |
int | raise (int sig) |
int | OsSigIsMember (const sigset_t *set, int signo) |
判定信号signo是否存在信号集中。如果信号集里已有该信号则返回1,否则返回0。如果有错误则返回-1 更多... | |
STATIC VOID | OsMoveTmpInfoToUnbInfo (sig_cb *sigcb, INT32 signo) |
STATIC INT32 | OsAddSigInfoToTmpList (sig_cb *sigcb, siginfo_t *info) |
VOID | OsClearSigInfoTmpList (sig_cb *sigcb) |
STATIC INLINE VOID | OsSigWaitTaskWake (LosTaskCB *taskCB, INT32 signo) |
唤醒被挂起的处于等待指定信号的任务 更多... | |
STATIC UINT32 | OsPendingTaskWake (LosTaskCB *taskCB, INT32 signo) |
int | OsTcbDispatch (LosTaskCB *stcb, siginfo_t *info) |
给任务(线程)发送一个信号 更多... | |
void | OsSigMaskSwitch (LosTaskCB *const rtcb, sigset_t set) |
int | OsSigprocMask (int how, const sigset_t_l *setl, sigset_t_l *oldsetl) |
int | OsSigProcessForeachChild (LosProcessCB *spcb, ForEachTaskCB handler, void *arg) |
让进程的每一个task执行参数函数 更多... | |
static int | SigProcessSignalHandler (LosTaskCB *tcb, void *arg) |
信号处理函数,这里就是上面的 handler = SigProcessSignalHandler,见于 OsSigProcessSend 更多... | |
static int | SigProcessKillSigHandler (LosTaskCB *tcb, void *arg) |
进程收到 SIGKILL 信号后,通知任务tcb处理. 更多... | |
static void | SigProcessLoadTcb (struct ProcessSignalInfo *info, siginfo_t *sigInfo) |
int | OsSigProcessSend (LosProcessCB *spcb, siginfo_t *sigInfo) |
给参数进程发送参数信号 更多... | |
int | OsSigEmptySet (sigset_t *set) |
信号集全部清0 更多... | |
static int | OsSignalPermissionToCheck (const LosProcessCB *spcb) |
int | OsDispatch (pid_t pid, siginfo_t *info, int permission) |
信号分发,发送信号权限/进程组过滤. 更多... | |
int | OsKill (pid_t pid, int sig, int permission) |
int | OsKillLock (pid_t pid, int sig) |
给发送信号过程加锁 更多... | |
INT32 | OsTaskKillUnsafe (UINT32 taskID, INT32 signo) |
int | OsPthreadKill (UINT32 tid, int signo) |
发送信号 更多... | |
int | OsSigAddSet (sigset_t *set, int signo) |
向信号集中加入signo信号 更多... | |
int | OsSigPending (sigset_t *set) |
获取阻塞当前任务的信号集 更多... | |
STATIC int | FindFirstSetedBit (UINT64 n) |
int | OsSigTimedWaitNoLock (sigset_t *set, siginfo_t *info, unsigned int timeout) |
等待信号时间 更多... | |
int | OsSigTimedWait (sigset_t *set, siginfo_t *info, unsigned int timeout) |
让当前任务等待的信号 更多... | |
int | OsPause (void) |
通过信号挂起当前任务 更多... | |
int | OsSigSuspend (const sigset_t *set) |
用参数set代替进程的原有掩码,并暂停进程执行,直到收到信号再恢复原有掩码并继续执行进程。 更多... | |
int | OsSigAction (int sig, const sigaction_t *act, sigaction_t *oact) |
VOID | OsSigIntLock (VOID) |
VOID | OsSigIntUnlock (VOID) |
VOID * | OsSaveSignalContext (VOID *sp, VOID *newSp) |
保存信号上下文 更多... | |
VOID * | OsRestorSignalContext (VOID *sp) |
在文件 los_signal.c 第 96 行定义.
VOID OsClearSigInfoTmpList | ( | sig_cb * | sigcb | ) |
信号分发,发送信号权限/进程组过滤.
在文件 los_signal.c 第 412 行定义.
用于向进程或进程组发送信号 shell命令 kill 14 7(kill -14 7效果相同) 发送信号14(SIGALRM默认行为为进程终止)给7号进程 *
在文件 los_signal.c 第 450 行定义.
通过信号挂起当前任务
在文件 los_signal.c 第 617 行定义.
在文件 los_signal.c 第 143 行定义.
VOID * OsRestorSignalContext | ( | VOID * | sp | ) |
恢复信号上下文,由系统调用之__NR_sigreturn产生,这是一个内部产生的系统调用. 为什么要恢复呢? 因为系统调用的执行由任务内核态完成,使用的栈也是内核栈,CPU相关寄存器记录的都是内核栈的内容, 而系统调用完成后,需返回任务的用户栈执行,这时需将CPU各寄存器回到用户态现场 所以函数的功能就变成了还原寄存器的值 *
在文件 los_signal.c 第 786 行定义.
VOID * OsSaveSignalContext | ( | VOID * | sp, |
VOID * | newSp | ||
) |
保存信号上下文
产生系统调用时,也就是软中断时,保存用户栈寄存器现场信息 改写PC寄存器的值 *
在文件 los_signal.c 第 727 行定义.
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 行定义.
在文件 los_signal.c 第 211 行定义.
|
static |
int OsSigPending | ( | sigset_t * | set | ) |
int OsSigProcessForeachChild | ( | LosProcessCB * | spcb, |
ForEachTaskCB | handler, | ||
void * | arg | ||
) |
让进程的每一个task执行参数函数
在文件 los_signal.c 第 279 行定义.
int OsSigProcessSend | ( | LosProcessCB * | spcb, |
siginfo_t * | sigInfo | ||
) |
给参数进程发送参数信号
在文件 los_signal.c 第 362 行定义.
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 第 568 行定义.
在文件 los_signal.c 第 490 行定义.
给任务(线程)发送一个信号
在文件 los_signal.c 第 182 行定义.
在文件 los_signal.c 第 45 行定义.
|
static |
信号处理函数,这里就是上面的 handler = SigProcessSignalHandler,见于 OsSigProcessSend
在文件 los_signal.c 第 292 行定义.