signal
创始人
2024-02-22 00:48:30
0

signal

信号提供一种机制,告诉用户进程发生了那些异常。

linux信号量

编号信号名称缺省动作说明
1SIGHUP终止终止控制终端或进程
2SIGINT终止键盘产生的中断(Ctrl-C)
3SIGQUITdump键盘产生的退出
4SIGILLdump非法指令
5SIGTRAPdumpdebug中断
6SIGABRT/SIGIOTdump异常中止
7SIGBUS/SIGEMTdump总线异常/EMT指令
8SIGFPEdump浮点运算溢出
9SIGKILL终止强制进程终止
10SIGUSR1终止用户信号,进程可自定义用途
11SIGSEGVdump非法内存地址引用
12SIGUSR2终止用户信号,进程可自定义用途
13SIGPIPE终止向某个没有读取的管道中写入数据
14SIGALRM终止时钟中断(闹钟)
15SIGTERM终止进程终止
16SIGSTKFLT终止协处理器栈错误
17SIGCHLD忽略子进程退出或中断
18SIGCONT继续如进程停止状态则开始运行
19SIGSTOP停止停止进程运行
20SIGSTP停止键盘产生的停止
21SIGTTIN停止后台进程请求输入
22SIGTTOU停止后台进程请求输出
23SIGURG忽略socket发生紧急情况
24SIGXCPUdumpCPU时间限制被打破
25SIGXFSZdump文件大小限制被打破
26SIGVTALRM终止虚拟定时时钟
27SIGPROF终止profile timer clock
28SIGWINCH忽略窗口尺寸调整
29SIGIO/SIGPOLL终止I/O可用
30SIGPWR终止电源异常
31SIGSYS/SYSUNUSEDdump系统调用异常

sigaction 函数

int sigaction(int signum, // 信号量const struct sigaction *act, // 设置对信号量新的处理方式struct sigaction *oldact);   // oldact如果非空,会将原来的信号量处理方式保存到oldact

sigaction结构体

struct sigaction {void     (*sa_handler)(int);void     (*sa_sigaction)(int, siginfo_t*, void*);sigset_t   sa_mask;int        sa_flags;void     (*sa_restorer)(void);
};
  • sa_handle, 指定信号捕捉后的处理函数名(即注册函数)。也可赋值为

    • SIG_IGN表忽略
    • SIG_DFL表执行默认动作
  • sa_sigaction, 如果sa_flags 设置了SA_SIGINFO, sa_sigaction可以替代sa_handle指定信号捕捉后处理函数名(即注册函数)

    • int, signal num
    • siginfo_t *
    • ucontext_t (cast to void *)
  • sa_flags, 修改信号行为的标志

  • sa_mask, 调用信号处理函数时,所要屏蔽的信号集合

  • sa_restorer, 为了返回旧的信号处理程序,但现在应该是已经弃用了

  • SA_ONSTACK 在信号处理程序的执行期间使用备用信号堆栈。[1,2]

    Here is one example…a process has a limit on the size of the stack. If a process exceeds that limit it will get a signal, often SIGSEGV, but it can vary from os to os. Now, how can you catch that signal? Without an alternate stack, the signal handler could never run.

    I had this exact situation once. A process was dying from a blown stack but its current directory was in a filesystem that was too small to hold a core dump. My handler needed to catch the signal, cd to a large filesystem, set the signal action back to default, and resend the signal to itself. I could not have done that without an alternate stack.

    That was the only time that I needed an alternate stack.

  • SA_RESTART, 当信号处理函数返回后, 被该信号中断的系统调用将自动恢复.[3]

  • SA_SIGINFO, sa_sigaction可以替代sa_handle指定信号捕捉后处理函数名(即注册函数)

siginfo_t

typedef struct {int si_signo;int si_code;union sigval si_value;int si_errno;pid_t si_pid;uid_t si_uid;void *si_addr;int si_status;int si_band;
} siginfo_t;
  • si_signo, signal number
  • si_code
  • si_errno
  • si_pid, 发送该信息的进程pid
  • si_uid, 发送该信息的用户uid
  • si_addr, 错误发生的地址

sigaddset

int sigaddset(sigset_t *set, int signum);
typedef struct {unsigned long sig[_NSIG_WORDS];
} sigset_t

sigemptyset

int sigemptyset(sigset_t *set)

将参数set信号集初始化并清空

pthread_sigmask

屏蔽某个线程对某些信号的 响应处理

int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);
How:
SIG_BLOCK:     结果集是当前集合参数集的并集
SIG_UNBLOCK: 结果集是当前集合参数集的差集
SIG_SETMASK: 结果集是由参数集指向的集

sigfillset

int sigfillset(sigset_t *set);

set指向的信号集中将包含linux支持的信号量

sigdelset

int sigdelset(sigset_t *set, int signum);

在set指向的信号集中删除signum信号

ucontext_t

// ucontext.h
typedef struct ucontext {unsigned long int uc_flags;struct ucontext *uc_link; // 指向一个上下文,当当前上下文结束时,将返回执行该上下文stack_t uc_stack; // 栈信息mcontext_t uc_mcontext; // 保存上下文的各种寄存器信息__sigset_t uc_sigmask; // 屏蔽的信号量集合struct _libc_fpstate __fpregs_mem;
} ucontext_t;

stack_t

typedef struct {void *ss_sp; // 栈空间指针,指向当前栈所在的位置int ss_flags; // 栈空间的flagssize_t ss_size; // 整个栈的大小
} stack_t;

mcontext_t

相关内容

热门资讯

氢能正成为六盘水高质量发展新引... 转自:贵州日报 本报讯(记者 尚宇杰 顾冰洁 郭立)5月10日,六盘水氢能示范应用暨美锦华宇煤焦氢二...
川报早读丨9月见 “金熊猫”在... 转自:四川日报 今年是中国与意大利建交55周年,近日,“...
全市防汛抗旱工作会议召开 来源:无锡日报全市防汛抗旱工作会议召开进一步强化风险意识底线思维 严阵以待打好防灾保安主动仗  5月...
老街区 新活力 转自:贵州日报4月19日,黔东南州黎平县肇兴侗寨开展的传统民俗巡游活动,独具魅力。贵州日报天眼新闻记...
微风露台品人生 日落西山,余霞成绮,轻柔的晚风掠过600年古树梢,拂过天坛祈年殿的鎏金宝顶,抚上观坛露台上人们的脸颊...
辽宁:造船业破浪前行 大连船舶重工集团有限公司码头,大型LNG运输船正在建造。 辽宁日报特约记者 王华 摄  近日,“绿色...
王毅同巴基斯坦副总理兼外长达尔... 转自:新华社新华社北京5月10日电 2025年5月10日,中共中央政治局委员、外交部长王毅应约同巴...
贵阳市南明区着力推进国家特殊教... 转自:贵州日报 本报讯(记者 谌贵璇)贵阳市南明区自今年2月获批“国家特殊教育改革实验区”以来,围绕...
推动统一大市场先行区建设 2023年,广东省与国家市场监督管理总局在广州签署合作框架协议,共同建设粤港澳大湾区统一大市场公平竞...
一条越走越宽广的大道 转自:贵州日报 新华社记者 郝薇薇 杨依军又一次飞越亚欧大陆,又一次走进满目春色的莫斯科。在和煦的阳...
匠心守护放心药 转自:辽宁日报 本报记者 许蔚冰 人民大会堂金色穹顶下,姜婷胸前的五一劳动奖章闪耀着光芒。这位来自本...
当多日游只需一张票 正是旅游好时节。广西南宁青秀山公园、贵州安顺黄果树瀑布、湖南张家界国家森林公园等知名5A级景区,不约...
把“中国奶瓶”牢握在手 今年2月份,参加完民营企业座谈会,黑龙江飞鹤乳业有限公司董事长冷友斌倍感振奋。他说,“会议强调要坚定...
咖啡远行记 咖啡是全球第二大饮品。据统计,全球平均每天约消耗22.5亿杯咖啡。从清晨唤醒都市的第一缕醇香到横跨五...
巴基斯坦外交部:巴方对印度侵略... 转自:新华社新华社伊斯兰堡5月10日电(记者杨恺)巴基斯坦外交部10日发表声明说,为了地区和平与稳定...
我省首届中小学人工智能教育活动... 转自:辽宁日报 本报讯 记者白昊报道 5月10日,我省首届中小学人工智能教育活动周在沈阳启动,亮点纷...
沈阳“5G-A”商用一年 网速... 转自:沈阳日报  最近有一些沈阳市民发现自己手机上的信号栏,5G标识后面多了个字母“A”。5G-A是...
“科转沈阳”赋智惠企活动加速科... 转自:沈阳日报  5月9日,2025“科转沈阳”赋智惠企高校院所科技成果路演浑南区专场活动,在浑南科...
辉山街道举办2025年春季高校... 转自:沈阳日报  本报讯(沈阳日报、沈报全媒体记者李莉)5月9日,沈北新区辉山街道与辽宁装备职业技术...
伊朗外长:伊朗坚持和平利用核能... 转自:新华社新华社多哈5月10日电(记者汪强 陈霄)伊朗外长阿拉格齐10日在多哈出席第四届阿拉伯-伊...