当前位置:首页 > 系统教程 > 正文

Linux信号详解(从入门到实践)

什么是Linux信号?

信号是Linux系统中一种进程间通信机制,用于通知进程发生了某个事件。它类似于软件中断,可以异步处理。常见的Linux信号包括SIGINT(中断)、SIGTERM(终止)等。

常见的信号类型

每个信号都有一个唯一的编号和名称。以下是一些重要的信号类型

  • SIGINT (2):用户按下Ctrl+C时产生,默认终止进程。
  • SIGQUIT (3):用户按下Ctrl+\时产生,默认终止并生成核心转储。
  • SIGKILL (9):强制杀死进程,不能被捕获或忽略。
  • SIGTERM (15):请求进程终止,可以被捕获或忽略。
  • SIGSTOP:暂停进程,不能被捕获或忽略。
  • SIGCONT:继续暂停的进程。
Linux信号详解(从入门到实践) Linux信号 信号处理 kill命令 信号类型 第1张

信号处理方式

进程可以通过信号处理函数来改变信号的默认行为。常用的API有signal()sigaction()。例如,忽略SIGINT信号:

signal(SIGINT, SIG_IGN);

发送信号:kill命令

使用kill命令可以向指定进程发送信号。例如,发送SIGTERM信号终止PID为1234的进程:

kill -15 1234

或者强制杀死:

kill -9 1234

在程序中可以使用kill()函数发送信号。

实践示例:捕获信号

下面是一个简单的C程序,捕获SIGINT并打印消息:

#include #include #include void handler(int sig) {    printf("捕获到信号 %d", sig);}int main() {    signal(SIGINT, handler);    while(1) {        printf("运行中...");        sleep(1);    }    return 0;}

运行后,按下Ctrl+C会调用handler函数。

注意事项

Linux信号中,SIGKILL和SIGSTOP不能被捕获或忽略,这是系统的安全机制。另外,信号处理函数应尽量简单,避免调用不可重入函数。