进程信号的概念与作用
进程信号是Linux系统中用于进程间通信的一种机制,允许一个进程向另一个进程发送简单的通知。信号通常用于通知进程发生了某种事件,例如用户按下了Ctrl+C、子进程终止或硬件异常等。信号的处理机制使得进程能够对这些事件做出响应。
Linux系统提供了多种标准信号,每种信号都有唯一的编号和名称。例如,SIGINT(编号2)表示中断信号,通常由Ctrl+C触发;SIGKILL(编号9)表示强制终止信号,无法被忽略或捕获;SIGTERM(编号15)表示终止信号,通常用于请求进程正常退出。
信号的发送与接收
在Linux中,信号的发送可以通过多种方式实现。常用的方法包括使用kill命令或调用kill()系统调用。kill命令的语法如下:
kill -<signal> <pid>
其中<signal>是信号名称或编号,<pid>是目标进程的ID。
在C程序中,可以使用kill()函数发送信号:
#include <signal.h>
#include <unistd.h>
int main() {
pid_t pid = 1234; // 目标进程ID
kill(pid, SIGTERM); // 发送SIGTERM信号
return 0;
}
信号的处理方式
进程对信号的处理有三种方式:
- 忽略信号:通过将信号的处理函数设置为
SIG_IGN来忽略信号。例如:signal(SIGINT, SIG_IGN); // 忽略SIGINT信号 - 捕获信号:通过注册自定义的信号处理函数来捕获信号。例如:
#include <stdio.h> #include <signal.h> #include <unistd.h> void handle_signal(int sig) { printf("Received signal %d\n", sig); } int main() { signal(SIGINT, handle_signal); // 捕获SIGINT信号 while (1) { sleep(1); } return 0; }
3162

被折叠的 条评论
为什么被折叠?



