我正在爲考試做一些練習題,其中一個問題提供了兩段代碼,分別爲parent.c和child.c。父母創建一個孩子並在其上觸發信號,孩子每次收到信號都會顯示一條消息。孩子將花費其餘的時間從main打印消息。問題是描述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'有*錯誤。再說一遍就會把整件事情都帶走。你能解釋一下兒童流程在那裏想要做什麼嗎?如果你明白這一點,那麼明白爲什麼它錯了不應該很難。 –