微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果子进程被阻塞怎么办,如何阻止父进程?

如何解决如果子进程被阻塞怎么办,如何阻止父进程?

我必须以强顺序运行我的进程,子进程然后父进程,如果子进程被阻塞怎么办,如何阻止父进程?

[FunctionName("GetCars")]
public async Task<IActionResult> GetCars([HttpTrigger(AuthorizationLevel.Anonymous,"get",Route = "api/v1/id/{id}")] HttpRequest req,Guid id)
{
    try
    {
        if (id == Guid.Empty)
        {
            _logger.LogError("Id is Empty");
        }

        var cars= _deviceService.GetCars(id);

        return new OkObjectResult(cars);
    }
    catch (Exception ex)
    {               
        _logger.LogError(ex,"Failed to Fetch Cars");
                
    }
}

解决方法

Aaand 作为在循环中执行 waitpid()WNOHANG 超时的活动 cpu-busy 循环的替代方案,您应该更喜欢以 cpu 空闲的方式实现它。>

不要从父级调用 wait,而是启用 SIGCHLD 并使用计时器设置超时,然后调用 pause() 并使用 pause() 等待和调度来自信号的事件。甚至在 man 3 wait 中都有一个如何做的示例。

同样在 Linux 上,您可以使用 pidfd_open(pid,0) 并在超时的情况下调用 poll() 以获得 POLLIN

,

从您给出的评论来看:您不想阻止父级阻止被阻止的子级,这是由 wait() 完成的。相反,您不希望在 wait() 中阻止父级。

为此使用 waitpid()。它接收第三个参数,其中可以包含 WNOHANG。这将使 waitpid() 立即返回,而无需等待某个孩子更改其状态。但是,您需要实现某种循环,检查所需状态,可能还需要超时。

有关更多信息,请参阅文档。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。