在Linux系统中,信号(Signal)是一种进程间通信(IPC)机制,用于通知进程某个事件已经发生。信号可以由系统、用户程序或其他进程发送给目标进程,以触发特定的行为或响应。
SIGINT
信号通常由用户按下Ctrl+C触发,用于中断进程;SIGTERM
信号用于请求进程正常终止;SIGKILL
信号则用于强制终止进程,无法被捕获或忽略。kill
命令或系统调用kill()
来向进程发送信号。例如,kill -SIGTERM <pid>
会向指定PID的进程发送SIGTERM
信号。SIGSEGV
)或非法指令(SIGILL
),以提高程序的健壮性。sigaction()
系统调用设置信号处理函数,并检查信号的传递状态。sigprocmask()
)来暂时阻止某些信号的接收,直到处理完当前信号后再恢复接收。下面是一个简单的示例代码,演示如何捕获并处理SIGINT
信号(通常由Ctrl+C触发):
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void sigint_handler(int signum) {
printf("Received SIGINT signal (%d). Exiting...\n", signum);
exit(0);
}
int main() {
// 设置SIGINT信号的处理函数
signal(SIGINT, sigint_handler);
printf("Press Ctrl+C to send SIGINT signal...\n");
while (1) {
sleep(1); // 模拟长时间运行的进程
}
return 0;
}
在上面的示例中,我们使用signal()
函数将SIGINT
信号的处理函数设置为sigint_handler()
。当用户按下Ctrl+C时,进程会捕获到SIGINT
信号,并执行sigint_handler()
函数中的代码,打印一条消息并退出程序。
领取专属 10元无门槛券
手把手带您无忧上云