Linux系统中子进程向父进程发送信号
#include<stdio.h>
#include<stdlib.h>
int counter = 0;
void handler(int sig)
{
counter++;
sleep(1);
return;
}
int main(void)
{
int i;
signal(SIGUSR2, handler);
if (fork() == 0) {
for (i = 0; i < 5; i++) {
kill(getppid(), SIGUSR2);
printf("sent SIGUSR2 to parent\n");
}
exit(0);
}
wait(NULL);
printf("counter = %d\n", counter);
exit(0);
}
此程序中,通过信号SIGUSR2想父进程发送了5次信号处理全局变量counter加1,但是最终的结果counter却不是得到5,大家帮忙给解释下原因,多谢啦!
------解决方案--------------------非可靠信号不排队,且执行信号处理程序时,会自动BLOCK当前处理的信号。
你将handler中的sleep去掉(信号处理程序中本来就不应该用sleep这类函数)。然后在子进程的for中加上sleep(1)