gpt4 book ai didi

c - 如果超时,尝试使用 Alarm() 唤醒父进程

转载 作者:行者123 更新时间:2023-11-30 15:24:09 29 4
gpt4 key购买 nike

我正在用 C 语言编写一个与进程相关的程序,但在唤醒进程时遇到了一个小问题:

我有一个父进程,我使用 waitpid() 将其置于 sleep 状态,但我需要它在其子进程完成时或达到特定时间时继续运行。我的计划是调用alarm(timeout),然后调用waitpid(-1,&status,0),所以本质上该进程将等待直到子进程完成,如果子进程在超时时间内没有完成,则会发送一个信号并且 parent 在杀死 child 后会退出。我遇到的问题是这个 Alarm() 调用只是将“闹钟”打印到控制台,并且它似乎没有及时唤醒父级。谢谢!

最佳答案

您需要为 SIGALRM 安装信号处理程序。 Alarm() 在到期时发送 SIGALRM 信号,如果您不处理该信号,它将终止您的进程。

static int g_timeout;
void alrm_handler(int signo)
{
g_timeout = 1;
}

在你的主代码中,例如:

signal(SIGALRM, alrm_handler);
alarm(10);
pid_t p = waitpid(-1,&status,0);
if (p == -1) {
if (errno == EINTR && g_timeout) {
//timeout occured
} else {
//other error
}
}

关于c - 如果超时,尝试使用 Alarm() 唤醒父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28531589/

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