gpt4 book ai didi

c - 如何在 pause() 调用后恢复?

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:00 24 4
gpt4 key购买 nike

我需要在调用 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() 调用,我知道这一点是因为它从不打印消息 “你好!”

最佳答案

看起来您实际上是共享信号量失败的受害者。如果您按照 this answer 中的步骤操作把信号量放在共享内存中,那么你的程序就可以正常工作了:

#include <sys/mman.h>

...

sem_t *sem = mmap(NULL, sizeof(sem),
PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS,
-1, 0);

(显然将 &sem 替换为 sem)

关于c - 如何在 pause() 调用后恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20510164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com