我是 C 和系统编程的初学者。我编写了一个程序,它应该显示以下内容: 捕获 SIGUSR1 捕获 SIGUSR2 捕获信号
但是,当我执行“./test.c”时,当我键入 Ctrl-C 时,我唯一看到的是“Caught SIGINT”。如何修复我的代码以便我的程序显示上述消息?抱歉,如果我的问题很愚蠢。非常感谢您的帮助。感谢您的阅读。
编辑:
#include <signal.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
static void sigHandler_sigusr1(int sig)
{
//sig contains the signal number that was received
printf("Caught SIGUSR1, %d\n", getpid());
//kill(getpid(), SIGUSR1);
}
static void sigHandler_sigusr2(int sig)
{
//sig contains the signal number that was received
printf("Caught SIGSR2, %d\n", getpid());
//kill(getpid(), SIGUSR2);
}
static void sigHandler_sigint(int sig)
{
//sig contains the signal number that was received
printf("Caught SIGINT, Existing, %d\n", getpid());
//kill(getpid(), SIGINT);
exit(EXIT_SUCCESS);
}
int main(int argc, char *argv[])
{
if (signal(SIGUSR1, sigHandler_sigusr1) == SIG_ERR)
printf("Unable to create handler for SIGUSR1\n");
if (signal(SIGUSR2, sigHandler_sigusr2) == SIG_ERR)
printf("Unable to create handler for SIGUSR2\n");
if (signal(SIGINT, sigHandler_sigint) == SIG_ERR)
printf("Unable to create handler for SIGINT\n");
kill(getpid(), SIGUSR1);
kill(getpid(), SIGUSR2);
kill(getpid(), SIGINT);
while (1)
{
sleep(1);
}
return 0;
}
最佳答案
为了激活信号处理函数,您需要向进程发送信号。 您的代码中缺少它。
这就是你向自己发送信号的方式:
kill(getpid(), SIGUSR1);
您需要对 SIGUSR1
和 SIGUSR2
执行此操作。
您可以看到 SIGINT
消息的原因是,当您按 ctrl+c
时,您实际上向您的进程发送了 SIGINT
信号。
关于c - 如何显示 sigusr1 和 sigusr2 的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702727/