在Linux操作系统中,信号(Signal)是一种用于进程间通信(IPC)的简单而有效的机制。信号允许一个进程向另一个进程发送消息,以通知其发生了某个事件或需要执行某个操作。以下是关于Linux信号机制的详细解释:
void handler(int signum)的形式。kill()系统调用可以向指定进程发送信号。kill(pid, sig)中,pid可以是目标进程的PID,sig是要发送的信号编号。kill(0, sig)可以用来检查当前进程是否有权向其他进程发送信号。以下是一个简单的C语言程序,演示了如何注册和处理自定义信号:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
volatile sig_atomic_t stop_flag = 0;
void signal_handler(int signum) {
printf("Received signal %d, stopping...\n", signum);
stop_flag = 1;
}
int main() {
struct sigaction sa;
// 设置信号处理函数
sa.sa_handler = signal_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGUSR1, &sa, NULL) == -1) {
perror("sigaction");
exit(EXIT_FAILURE);
}
printf("Process is running. Press Ctrl+C to send SIGINT or kill -USR1 <pid> to send SIGUSR1.\n");
while (!stop_flag) {
sleep(1);
}
printf("Process stopped.\n");
return 0;
}
在这个示例中,当进程接收到SIGUSR1信号时,会调用signal_handler函数并设置stop_flag为1,从而退出主循环并结束程序。
总之,信号机制是Linux中一种强大且灵活的进程间通信手段,适用于各种场景下的事件通知和处理。