시험에 대한 연습 문제를하고 있는데 질문 중 하나에 parent.c 및 child.c라는 두 가지 코드가 있습니다. 부모는 자식을 만들고 신호를 발생시키고 자식은 신호를받을 때마다 메시지를 표시합니다. 어린이는 나머지 시간을 메인에서 보내는 메시지를 보내는 시간입니다. 문제는 child.c에서 신호 처리가 잘못된 점을 설명하고이를 수정하기 위해 코드를 다시 작성하는 것입니다. 나는 신호에 대한 일반적인 생각을 가지지 만 그것들을 구현하는데 많은 어려움을 겪는다. child.c의 procmask
이 제대로 작동하는지 확신 할 수 없지만 신호가 전혀 마음에 들지는 않지만 왜 마지막 값으로 NULL
을 입력했는지 알 수 없습니다. 왜 그 부분이 잘못된 것일까 요? 누군가 올바른 방향으로 나를 가리켜 주시고 코드의 어떤 부분이 왜이며 왜 그런지에 대한 아이디어를 주시겠습니까?부모 프로세스가 자식 프로세스에서 신호를 보내지 만 자식의 신호 처리를 향상시켜야합니다.
Parent.c
#include <unistd.h>
#include <signal.h>
int
main(int argc, char *argv[])
{
pid_t pid;
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
sigprocmask(SIG_BLOCK, &set, NULL);
pid = fork();
if (pid == 0) {
execlp("./child", "./child", NULL);
}
while (1) {
kill(pid, SIGUSR1);
}
return (0);
}
Child.c
#define _XOPEN_SOURCE 500
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
static void
handler(int signo)
{
printf("This is the SIGUSR1 signal handler!\n");
}
int
main(void)
{
sigset_t set;
sigemptyset(&set);
sigset(SIGUSR1, handler);
sigprocmask(SIG_SETMASK, &set, NULL);
while (1) {
printf("This is main()!\n");
}
return (0);
}
자녀의'sigprocmask'에 * 뭔가 잘못되었습니다. 더 이상 말하면 모든 것을 버릴 것입니다. 자녀 과정에서 무엇을하려고하는지 설명해 주시겠습니까? 당신이 그것을 이해한다면 왜 잘못되었는지 보는 것은 그렇게 어렵지 않아야합니다. –