但是结果只打印一次“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);
}


光脚赤膊 于 2013-03-06 16:52:07发表:
貌似两个进程没有真正的实现对sem的共享。具体解决方法,俺暂时无解
linux_rookie123 于 2012-12-25 21:39:30发表:
int sem_init(sem_t *sem, int pshared, unsigned int value)
第2个参数pshared为1时不是就是进程间共享的信号量了,那sem就是共享的信号量,子进程和父进程都对同一个信号操作。难道这有问题?