私は試験のためにいくつかの練習問題を行っています。問題の 1 つは、parent.c と child.c という 2 つのコードを提供します。親は子を作成し、それにシグナルを発し、子はシグナルを受信するたびにメッセージを表示します。子は残りの時間をメインからのメッセージの出力に費やします。問題は、child.c のシグナル処理の何が問題なのかを説明し、それを修正するためにコードを書き直すことです。シグナルの一般的な考え方は理解できますが、シグナルを実装するのは非常に困難です。in child.c が適切に機能しているかどうかprocmask
はわかりません。シグナルに完全に慣れているわけではありませんが、最後のパラメーターとして配置する理由がわかりません。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);
}
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);
}