我想捕获其句柄中的信号。所以我为一个信号定义了自定义处理程序。使用结构,我也设置了SA_NODEFER,以允许在其处理程序中接收信号。但我不知道检查这个的最好方法是什么。首先,我分叉子进程并在其中设置信号处理程序。然后我从父进程发送信号,但我不知道如何显示这个信息,例如使用printf。在hanlder内部应该做些什么来捕捉信号。 我会很感激任何帮助。谢谢。在其处理程序中捕获信号的最佳方法
编辑
我需要捕捉其处理程序中的信号。例如我已经创建这样处理函数
void signal12_handler(int sig) {
printf("Signal has been received\n");
// I need to do here some long time operations
}
从父进程,我发送信号之后和接收第一信号它开始在处理程序执行时间长的操作,但不等待执行此操作的结束后的我发送相同的信号进行处理,我需要得到通知。
我不知道什么是正确的方式来做到这一点。
编辑2
int main()
{
pid_t pid;
printf("Starting...\n");
pid = fork();
if (pid == -1)
{
printf("error\n");
return 1;
}
if (pid == 0)
{
printf("Child creation...\n");
memset (&sig_12, '\0', sizeof(sig_12));
sig_12.sa_handler = &signal12_handler;
sig_12.sa_flags = SA_NODEFER;
if (sigaction(SIGUSR2, &sig_12, NULL) < 0) {
perror ("sigaction");
return 1;
}
while(true) {};
printf("Child end ...\n");
}
else
{
printf("i`m parеnt, id=%d\n",getpid());
printf("send SIGNAL 12\n");
if (kill(pid,12)<0){printf("ERROR!\n");}
sleep(1);
if (kill(pid,12)<0){printf("ERROR!\n");}
sleep(1);
if (kill(pid,12)<0){printf("ERROR!\n");}
}
}
所以处理程序应该花费很多时间比在我的情况下,从父发送信号应大于2秒(2睡第二)的时间间隔。
请阅读编辑 – bryzzeij 2014-11-20 21:13:10
对不起,我忘了点击保存按钮 – bryzzeij 2014-11-20 21:25:09
请再看一遍,我添加了代码。 – bryzzeij 2014-11-20 21:41:49