我正在为考试做一些练习题,其中一个问题给出了两段代码,称为 parent.c 和 child.c 。父母创建一个孩子并向其发射信号,孩子每次收到信号时都会显示一条消息。孩子将花费剩下的时间打印来自 main 的消息。问题是描述 child.c 中的信号处理有什么问题,并重新编写代码来纠正它。我对信号有了大致的了解,但在实现它们时遇到了很多困难。我不确定procmask
在 child.c 中是否正常工作,我对信号并不完全满意,但我不明白你为什么要把NULL
它作为最后一个参数,所以也许这就是它的部分原因 错了吗?有人可以指出我正确的方向,并告诉我代码的哪一部分是错误的以及为什么。
父.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);
}
孩子.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);
}