在Linux系统中,除了SIGSEGV(段错误信号,当进程试图访问未分配的内存时产生)、SIGTERM(终止信号,通常用于有序地终止进程)和SIGINT(中断信号,通常由键盘产生,如Ctrl+C,用来终止前台进程)之外,还有许多其他信号。这些信号用于不同的目的,包括但不限于进程控制、错误报告和程序执行中的异常处理。
以下是一些常见的Linux信号及其简要说明:
-
SIGKILL(9):强制终止进程的信号,进程无法捕捉或忽略它。这个信号会立即终止进程。
-
SIGHUP(1):挂起信号,通常表示终端挂断。许多守护进程会捕捉该信号并重新加载配置文件。
-
SIGSTOP(19):无条件地停止进程,无法被捕捉或忽略。
-
SIGTSTP(20):通常由键盘(如Ctrl+Z)发送的停止信号,进程可以捕捉并处理该信号。
-
SIGCONT(18):继续执行被暂停的进程。可以用于恢复接收到SIGSTOP或SIGTSTP的进程。
-
SIGFPE(8):浮点异常信号,如除零或其他算术错误时产生。
-
SIGILL(4):非法指令信号,当进程执行了非法或无效的机器指令时产生。
-
SIGBUS(7):总线错误信号,通常由于内存访问出错而产生。
-
SIGQUIT(3):来自键盘的退出信号(通常为Ctrl+\),可以产生核心转储。
-
SIGABRT(6):进程调用abort()函数时产生,用于异常终止并生成核心转储。
-
SIGCHLD(17):当子进程状态发生变化(如退出或停止)时,父进程会收到此信号。
-
SIGALRM(14):由计时器产生的信号,常用于定时任务。
-
SIGUSR1(10) 和 SIGUSR2(12):用户自定义信号,用户可以在程序中定义这些信号的含义。
-
SIGPIPE(13):当进程向一个没有读端的管道或socket写入数据时,产生该信号。
-
SIGTTIN(21) 和 SIGTTOU(22):进程尝试从终端读取或写入数据,但该终端为后台进程时,会产生这些信号。
-
SIGURG(23):用于通知进程有紧急数据可读。
-
SIGXCPU(24) 和 SIGXFSZ(25):分别用于CPU时间限制超出和文件大小限制超出的信号。
-
SIGVTALRM 和 SIGPROF:与虚拟定时器和性能分析相关的信号。
-
SIGWINCH:窗口大小改变信号,当终端窗口大小改变时发送给进程。
-
SIGIO:输入/输出可能完成时发出的信号,用于异步I/O操作。
-
SIGPWR:电源故障(断电)信号。
-
SIGSYS:无效的系统调用信号。
-
实时信号(SIGRTMIN到SIGRTMAX):这是一组可扩展的实时信号,用户可以根据需要为它们分配用途。这些信号支持排队,因此被认为是可靠的。
请注意,Linux系统定义的信号总数可能因系统架构和版本而异,但通常包括上述信号。您可以通过在终端中运行kill -l
命令来查看当前系统上支持的所有信号及其编号。此外,信号的默认行为和是否可以被捕捉或忽略也取决于具体的信号和进程的行为。