Linux信号机制详解:概念、使用与处理

需积分: 3 0 下载量 42 浏览量 更新于2024-08-25 收藏 109KB PPT 举报
"第四章_LINUX信号主要介绍了信号的相关概念、使用方法以及处理方式,包括信号的生成、传递、寿命,以及LINUX系统中的常见信号种类和用途。此外,还讲解了如何通过kill函数发送信号及其用法示例。" 在UNIX和Linux操作系统中,信号是一种异步通信机制,它允许操作系统或其他进程通知目标进程发生了特定事件。信号是进程间通信(IPC)的一种轻量级方式,通常用于进程控制和异常处理。 **信号相关概念** 1. **信号生成与传递**:当某个事件触发(如非法指令执行、内存错误或用户键盘操作)时,系统会生成一个信号。这个信号随后会被传递给相应的进程,进程根据其设定的处理方式来响应信号。 2. **信号的寿命**:从信号生成到被传递给目标进程之间的时间间隔称为信号的寿命。在此期间,如果进程尚未处理该信号,它可能会保持挂起状态。 3. **挂起信号**:已生成但还未被传递或处理的信号被称为挂起信号,它们会等待进程的处理或被阻塞。 4. **信号处理**:进程可以设定对信号的处理方式,包括忽略信号、默认处理(系统默认的动作,如终止进程)或自定义处理函数。 **信号的使用** 1. **指定处理函数**:通过`signal()`或`sigaction()`函数,进程可以设置特定的信号处理函数。 2. **阻塞信号**:使用`sigprocmask()`函数,进程可以阻止在当前上下文中接收某些信号,直到信号被取消阻塞。 3. **发送信号**:`kill()`函数是向其他进程发送信号的主要方式。例如,`kill(-1, SIGTERM)`将向具有权限的所有进程发送终止信号。 **LINUX中的常见信号** 1. **SIGHUP**(1):挂断信号,通常用于通知进程重新初始化或关闭。 2. **SIGINT**(2):中断信号,通常由Ctrl+C触发,请求进程停止运行。 3. **SIGQUIT**(3):退出信号,由Ctrl+\触发,生成核心转储并退出进程。 4. **SIGFPE**(8):浮点运算异常,如除以零或非法浮点运算。 5. **SIGKILL**(9):强制杀死信号,无法被捕获、忽略或重定向,立即终止进程。 6. **SIGUSR1**和**SIGUSR2**(10和12):用户自定义信号,供应用程序使用。 7. **SIGALRM**(14):定时器信号,通常由`alarm()`函数触发。 8. **SIGTERM**(15):终止信号,请求进程优雅地终止。 9. **SIGCHLD**(17):子进程结束或停止时发送给父进程。 10. **SIGSTOP**(19):停止执行信号,不能被忽略或捕获,进程会被暂停。 **发送信号的`kill()`函数** `kill()`函数用于向指定进程发送信号。参数`pid`是目标进程的ID,`sig`是发送的信号类型。例如,`kill(3423, SIGUSR1)`将向进程ID为3423的进程发送SIGUSR1信号。如果`pid`为0,则信号发送给调用进程的进程组;如果`pid`为-1,则发送给有权接收信号的所有进程。 LINUX信号是进程间通信的重要机制,涉及进程的控制、异常处理和协作。理解和熟练使用信号对于编写可靠且健壮的Linux应用程序至关重要。