Я новичок в C и системном программировании. Я написал программу, и она должна отображать следующее: Поймали SIGUSR1 Пойманный SIGUSR2 Пойманный SIGINTКак отображать выходные данные для sigusr1 и sigusr2?
Однако, когда я «./test.c», единственное, что я вижу, это „Caught SIGINT“, когда я печатаю Ctrl-C. Как я могу исправить свой код, чтобы моя программа отображала сообщения выше? Извините, если мой вопрос немой. Ваша помощь очень ценится. Спасибо за прочтение.
Редакция:
#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;
}
Мое предложение [избегать использования printf в обработчике сигнала] (http://stackoverflow.com/questions/16891019/how-to-avoid-using-printf-in-a-signal-handler/16891065#16891065) –