Linux 信号

本文详细介绍了Linux系统的信号机制,包括信号的概念、产生、阻塞和捕捉。重点讲解了信号的产生条件,如终端操作、函数调用和软件条件。接着探讨了信号的阻塞,包括信号集操作函数、`sigprocmask`和`sigpending`函数的使用。此外,还深入分析了信号的捕捉,如`sigaction`函数和`pause`函数的运用。最后,文章提到了信号处理中的可重入函数概念和`sig_atomic_t`类型,以及处理竞态条件的`sigsuspend`函数。同时,强调了`SIGCHLD`信号在处理子进程结束时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux 信号

ref

信号的概念

最常见的信号就是在bash下启动一个程序按Ctrl+c 产生的硬件中断。如果CPU当前正在执行当前代码,则该进程的用户空间代码暂停,CPU就从用户态切换到内核态处理中断。

BTWCtrl-c产生的信号只能是前台进程发送,有些通过命令后+&放到后台运行,这样不必等待进程结束就可以接受新的命令,shell就可以在一个前台进程的同时跑多个后台进程,信号相对于进程的控制流程来说是异步的。

系统定义的信号列表

luyunchengdeMacBook-Pro:~ luyuncheng$ kill -l
1) SIGHUP    2) SIGINT   3) SIGQUIT  4) SIGILL
5) SIGTRAP   6) SIGABRT  7) SIGEMT   8) SIGFPE
9) SIGKILL  10) SIGBUS  11) SIGSEGV 12) SIGSYS
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG
17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD
21) SIGTTIN 22) SIGTTOU 23) SIGIO   24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM   27) SIGPROF 28) SIGWINCH
29) SIGINFO 30) SIGUSR1 31) SIGUSR2

这些编号和宏定义以及介绍在usr/include/signal.h可以找到。

./asm-generic/signal.h:10:#define SIGHUP         1
./x86_64-linux-gnu/bits/signum.h:33:#define SIGHUP      1   /* Hangup (POSIX).  */
./x86_64-linux-gnu/asm/signal.h:19:#define SIGHUP        1

在编号34以上为实时信号,34以下为非实时信号。

Signal Value Action Comment
SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process
SIGINT 2 Term Interrupt from keyboard
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no read
SIGALRM 14 Term Timer signal from alarm(2)
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCONT 19,18,25 ~~ Continue if stopped
SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop typed at tty
SIGTTIN 21,21,26 Stop tty input for background process
SIGTTOU 22,22,27 Stop tty output for background process

其中Action中,T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值