红联Linux门户
Linux帮助

请教LINUX 信号处理函数问题

发布时间:2012-12-24 22:05:53来源:红联作者:linux_rookie123
学习LINUX信号处理函数方面的知识,写了个小程序,目的是父进程创建一个子进程。子进程连续发送5个SIGSUR2信号给父进程,父进程注册信号处理函数handler,handler每次计数。为了避免父进程阻塞信号,我使用了同步信号量,初始化为可用,子进程可以第1次获取同步信号量,之后每次获取信号量必须在handler处理之后释放。
但是结果只打印一次“sent SIGUSR2 to parent 0 time” 就挂住了,好像是子进程第2次不能获取信号量一直挂着,父进程调用wait函数也一直挂着。我不知道是信号量使用不对,还是信号处理函数handler有问题,请那位大侠帮小弟看看,谢谢!

#include
#include
#include
#include

int counter = 0;
sem_t sem;

void handler(int sig)
{
counter++;
if(0 != sem_post(&sem))
{
printf("failed to release sem\n");
}
else
{
printf("suceeded to release sem\n");
}

return;
}

int main()
{
int i;

signal(SIGUSR2, handler);

sem_init(&sem, 1, 1);

if(fork() == 0)
{
for(i=0;i<5;i++)
{
sem_wait(&sem);
kill(getppid(), SIGUSR2);
printf("sent SIGUSR2 to parent %d time\n", i);
}

exit(0);
}

wait(NULL);

printf("counter = %d \n", counter);
exit(0);
}
文章评论

共有 2 条评论

  1. 光脚赤膊 于 2013-03-06 16:52:07发表:

    貌似两个进程没有真正的实现对sem的共享。具体解决方法,俺暂时无解

  2. linux_rookie123 于 2012-12-25 21:39:30发表:

    int sem_init(sem_t *sem, int pshared, unsigned int value)

    第2个参数pshared为1时不是就是进程间共享的信号量了,那sem就是共享的信号量,子进程和父进程都对同一个信号操作。难道这有问题?