函数逻辑报告 |
Source Code:kernel\signal.c |
Create Date:2022-07-27 10:15:37 |
| Last Modify:2020-03-17 13:28:47 | Copyright©Brick |
| 首页 | 函数Tree |
| 注解内核,赢得工具 | 下载SCCT | English |
函数名称:__send_signal
函数原型:static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t, enum pid_type type, bool force)
返回类型:int
参数:
| 类型 | 参数 | 名称 |
|---|---|---|
| int | sig | |
| struct kernel_siginfo * | info | |
| struct task_struct * | t | |
| enum pid_type | type | |
| bool | force |
| 1071 | ret等于0 |
| 1073 | assert_spin_locked( & siglock) |
| 1075 | result等于TRACE_SIGNAL_IGNORED |
| 1079 | pending等于如果type不等于单一进程则shared_pending否则待处理信号 |
| 1086 | 如果legacy_queue(pending, sig)则转到:ret |
| 1089 | result等于TRACE_SIGNAL_DELIVERED |
| 1093 | 如果sig恒等于SIGKILL或任务标志按位与I am a kernel thread 则转到:out_set |
| 1105 | 如果sig小于These should not be considered constants from userland. 则override_rlimit等于is_si_special(info)或si_code大于等于0 |
| 1107 | 否则override_rlimit等于0 |
| 1110 | q等于allocate a new signal queue record* - this may be called without locks if and only if t == current, otherwise an* appropriate lock must be held to stop the target task from exiting |
| 1111 | 如果q则 |
| 1112 | 添加链表项 |
| 1115 | clear_siginfo( & info) |
| 1117 | si_errno等于0 |
| 1119 | si_pid等于task_tgid_nr_ns(当前进程, task_active_pid_ns(t)) |
| 1122 | si_uid等于from_kuid_munged(task_cred_xxx(t, user_ns), current_uid()) |
| 1126 | 退出 |
| 1127 | 当:info恒等于SEND_SIG_PRIV |
| 1135 | 默认 |
| 1136 | copy_siginfo( & info, info) |
| 1137 | 退出 |
| 1149 | 否则 |
| 1154 | result等于TRACE_SIGNAL_LOSE_INFO |
| 1157 | out_set : |
| 1162 | 如果type大于PIDTYPE_TGID则 |
| 1167 | 如果sig恒等于SIGCONT则sigdelsetmask(signal, SIG_KERNEL_STOP_MASK) |
| 1169 | 否则如果sig_kernel_stop(sig)则sigdelset(signal, SIGCONT) |
| 1175 | complete_signal(sig, t, type) |
| 1176 | ret : |
| 1178 | 返回:ret |
| 名称 | 描述 |
|---|---|
| send_signal | |
| kill_pid_usb_asyncio | The usb asyncio usage of siginfo is wrong |
| 源代码转换工具 开放的插件接口 | X |
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |