0
父進程分叉兩個子進程,分別代替SIGUSR1
和SIGUSR2
信號。發送和處理帶子進程信號的問題C
父進程取代SIGINT
信號,在捕獲它時分別發送SIGUSR1
和SIGUSR2
給它的孩子。
時按Ctrl-C應該是預期的輸出:
Ctrl+C is pressed。
received SIGUSR1 signal
received SIGUSR2 signal
但在按Ctrl-C我有
Ctrl+C is pressed。
我不知道爲什麼sig_handler_1
和sig_handler_2
不excuted 。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
void fun_ctrl_c(int);
void sig_handler_1(int);
void sig_handler_2(int);
pid_t pid1;
pid_t pid2;
int status;
int main() {
pid1 = fork();
if (pid1 == 0) { // child 1
// avoid to be killed
(void) signal(SIGINT, SIG_IGN);
// replace SIGUSR1
(void) signal(SIGUSR1, sig_handler_1);
raise(SIGSTOP);
} else {
pid2 = fork();
if (pid2 == 0) { // child 2
// avoid to be killed
(void) signal(SIGINT, SIG_IGN);
// replace SIGUSR2
(void) signal(SIGUSR2, sig_handler_2);
raise(SIGSTOP);
} else { // parent
(void) signal(SIGINT, fun_ctrl_c);
waitpid(-1, &status, 0);
}
}
return 0;
}
void fun_ctrl_c(int)
{
printf("Ctrl+C is pressed。\n");
kill(pid1 ,SIGUSR1);
kill(pid2 ,SIGUSR2);
(void) signal(SIGINT, SIG_DFL);
}
void sig_handler_1(int)
{
printf("received SIGUSR1 signal\n");
}
void sig_handler_2(int)
{
printf("received SIGUSR2 signal\n");
}
使用'替換'不是通常的術語。你似乎在'處理'這些信號,或者'用不同的信號處理器來代替'。 – 2014-09-06 19:37:52