在Linux系统中,信号是一种进程间通信(IPC)机制,用于通知接收进程某个事件已经发生。除了标准的信号(如SIGINT、SIGTERM等),用户还可以发送自定义信号。以下是关于Linux发送自定义信号的基础概念、优势、类型、应用场景以及可能遇到的问题和解决方法。
kill
命令或sigqueue
函数发送自定义信号。Linux系统中的信号分为标准信号和实时信号。自定义信号通常使用实时信号,因为它们支持排队并且具有确定的传递顺序。
以下是一个简单的示例,展示如何在Linux中发送和接收自定义信号。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <pid>\n", argv[0]);
exit(1);
}
int pid = atoi(argv[1]);
int sig = SIGUSR1; // 使用SIGUSR1作为自定义信号
if (kill(pid, sig) == -1) {
perror("kill");
exit(1);
}
printf("Signal %d sent to process %d\n", sig, pid);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void handle_signal(int sig) {
printf("Received signal %d\n", sig);
}
int main() {
struct sigaction sa;
sa.sa_handler = handle_signal;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGUSR1, &sa, NULL) == -1) {
perror("sigaction");
exit(1);
}
printf("Waiting for signals...\n");
while (1) {
sleep(1); // 保持进程运行
}
return 0;
}
sigaction
。通过以上步骤和示例代码,你应该能够在Linux系统中成功发送和接收自定义信号。
领取专属 10元无门槛券
手把手带您无忧上云