1
我需要调用pause()
后恢复,从我读的手册,它应该恢复后,它收到一个信号,但显然不是为我工作,我也使用信号量,以确保程序注册信号处理程序,然后再发送信号以恢复它如何在暂停()通话后恢复?
void child(){
fprintf(stdout,"Hello!\n");
exit(0);
}
int main(int argc, char **argv){
sem_t sem;
sem_init(&sem,0,0);
int pid = fork();
if(pid == 0){
signal(SIGCONT, child);
sem_post(&sem);
pause();
} else {
sem_wait(&sem);
kill(pid, SIGCONT);
int status;
waitpid(pid,&status, 0);
}
return EXIT_SUCCESS;
}
这不是我正在处理的实际程序,但它具有它的结构。
正在发生的事情是父挂起,在waitpid()
和孩子永远不会离开pause()
电话,我知道这是因为它从来没有打印消息"Hello!"
如果它不工作,发生了什么? – Xymostech
我忘了补充一点,谢谢:) –
检查'sem_init'的返回值。也许在您的系统上不支持未命名的信号量。我在OS X机器上遇到过这种情况。编辑:另外,不应该你的第二个参数是非零? “如果pshared参数具有非零值,那么信号量将在进程之间共享;在这种情况下,任何可以访问信号量sem的进程都可以使用sem执行sem_wait(),sem_trywait(),sem_post()和sem_destroy()操作“。 – tangrs