Linux中的信号有哪些?

发布于:2024-09-18 ⋅ 阅读:(126) ⋅ 点赞:(0)

目录

1. 终止信号(Termination Signals)

2. 暂停/停止信号(Stop Signals)

3. 错误信号(Error Signals)

4. 核心转储信号(Core Dump Signals)

5. 进程控制信号(Process Control Signals)

6. 其他信号

信号的处理方式


在 Linux 系统中,信号是一种用于进程间通信的机制,可以向进程发送异步通知,以通知其发生某些事件。Linux 中的信号种类很多,常见的信号如下:

1. 终止信号(Termination Signals)

这些信号用于通知进程终止。

  • SIGTERM (15):默认的终止信号,通常用于有序地终止进程。进程可以捕捉该信号,并在终止前执行一些清理工作。
  • SIGKILL (9):强制终止进程的信号,进程无法捕捉或忽略它。这个信号会立即终止进程。
  • SIGINT (2):通常由键盘产生的中断信号(如 Ctrl+C),用来终止前台进程。
  • SIGHUP (1):挂起信号,通常表示终端挂断。许多守护进程会捕捉该信号并重新加载配置文件。

2. 暂停/停止信号(Stop Signals)

用于停止或暂停进程的执行。

  • SIGSTOP (19):无条件地停止进程,无法被捕捉或忽略。
  • SIGTSTP (20):通常由键盘(如 Ctrl+Z)发送的停止信号,进程可以捕捉并处理该信号。
  • SIGCONT (18):继续执行被暂停的进程。可以用于恢复接收到 SIGSTOPSIGTSTP 的进程。

3. 错误信号(Error Signals)

这些信号通常由系统自动发送,用于报告程序出现的错误。

  • SIGSEGV (11):段错误信号,当进程试图访问未分配的内存时产生。
  • SIGFPE (8):浮点异常信号,如除零或其他算术错误时产生。
  • SIGILL (4):非法指令信号,当进程执行了非法或无效的机器指令时产生。
  • SIGBUS (7):总线错误信号,通常由于内存访问出错而产生。

4. 核心转储信号(Core Dump Signals)

这些信号会导致进程终止并生成内存转储(core dump),用于调试。

  • SIGQUIT (3):来自键盘的退出信号(通常为 Ctrl+\),可以产生核心转储。
  • SIGABRT (6):进程调用 abort() 函数时产生,用于异常终止并生成核心转储。

5. 进程控制信号(Process Control Signals)

这些信号用于控制进程的行为。

  • SIGCHLD (17):当子进程状态发生变化(如退出或停止)时,父进程会收到此信号。
  • SIGALRM (14):由计时器产生的信号,常用于定时任务。
  • SIGUSR1 (10) 和 SIGUSR2 (12):用户自定义信号,用户可以在程序中定义这些信号的含义。

6. 其他信号

  • SIGPIPE (13):当进程向一个没有读端的管道或 socket 写入数据时,产生该信号。
  • SIGTTIN (21)SIGTTOU (22):进程尝试从终端读取或写入数据,但该终端为后台进程时,会产生这些信号。

信号的处理方式

进程可以对信号进行以下处理:

  1. 忽略信号:通过调用 signal() 函数忽略特定信号,但某些信号如 SIGKILLSIGSTOP 无法被忽略。
  2. 捕捉信号:进程可以通过设置信号处理函数(handler)来捕捉和处理特定信号。
  3. 默认处理:如果进程没有自定义处理方式,信号会按照系统的默认行为进行处理,例如终止进程。

网站公告

今日签到

点亮在社区的每一天
去签到