在Linux中,信号(Signal)是一种软件中断机制,用于通知进程某个事件已经发生。信号可以由系统产生,也可以由进程自身或其他进程产生。Linux提供了多种预定义的信号,如SIGINT(中断信号,通常由Ctrl+C产生)、SIGTERM(终止信号)等。
自定义信号集是指用户可以定义自己的信号,并在进程间进行通信。这通常通过signal
函数或者更现代的sigaction
函数来实现。
以下是一个简单的示例,展示如何使用自定义信号SIGUSR1:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void signal_handler(int signum) {
printf("Received signal %d
", signum);
}
int main() {
// 设置信号处理函数
signal(SIGUSR1, signal_handler);
printf("Waiting for SIGUSR1...
");
// 进入无限循环,等待信号
while (1) {
sleep(1);
}
return 0;
}
在另一个进程中,你可以使用kill
命令或kill()
系统调用来发送SIGUSR1信号:
kill -USR1 <pid>
或者在C程序中:
#include <signal.h>
#include <unistd.h>
int main() {
pid_t pid = /* 获取目标进程的PID */;
kill(pid, SIGUSR1);
return 0;
}
sigaction
代替signal
,因为sigaction
提供了更多的控制和可靠性。通过以上方法,可以有效地使用自定义信号集来实现进程间的通信和事件通知。
领取专属 10元无门槛券
手把手带您无忧上云