Linux信号的三种状态
Linux操作系统中,信号是一种用于进程间通信的机制。它可以用来通知进程发生了某个事件,比如用户按下了某个键,或者进程执行了一个非法操作。Linux信号有三种状态,分别是默认处理、忽略和捕获。
1. 默认处理状态
默认处理状态是指当进程接收到信号时,系统会采取默认的处理方式来处理该信号。不同的信号有不同的默认处理方式,比如终止进程、忽略信号、或者产生核心转储文件等。可以通过man 7 signal命令查看各个信号的默认处理方式。
2. 忽略状态
忽略状态是指当进程接收到信号时,直接忽略该信号,不做任何处理。可以通过调用signal()函数将某个信号设置为忽略状态,示例代码如下:
#include
#include
int main() {
signal(SIGINT, SIG_IGN); // 将SIGINT信号设置为忽略状态
while (1) {
printf("Running...\n");
sleep(1);
}
return 0;
在上述代码中,我们将SIGINT信号(即Ctrl+C)设置为忽略状态,这样当用户按下Ctrl+C时,程序不会终止,而是继续运行。
3. 捕获状态
捕获状态是指当进程接收到信号时,执行一个用户自定义的信号处理函数来处理该信号。可以通过调用signal()函数将某个信号设置为捕获状态,并指定对应的信号处理函数,示例代码如下:
#include
#include
void signalHandler(int signum) {
printf("Received signal: %d\n", signum);
int main() {
signal(SIGINT, signalHandler); // 将SIGINT信号设置为捕获状态,并指定signalHandler函数为信号处理函数
while (1) {
printf("Running...\n");
sleep(1);
}
return 0;
在上述代码中,我们将SIGINT信号(即Ctrl+C)设置为捕获状态,并指定signalHandler函数为信号处理函数。当用户按下Ctrl+C时,程序会执行signalHandler函数,并输出"Received signal: 2",其中2是SIGINT信号的编号。
Linux信号有三种状态,分别是默认处理、忽略和捕获。默认处理状态是系统对信号的默认处理方式;忽略状态是直接忽略信号,不做任何处理;捕获状态是执行用户自定义的信号处理函数来处理信号。通过设置信号的处理状态,可以灵活地对不同的信号进行处理。