如何解决如果子进程被阻塞怎么办,如何阻止父进程?
我必须以强顺序运行我的进程,子进程然后父进程,如果子进程被阻塞怎么办,如何阻止父进程?
[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 举报,一经查实,本站将立刻删除。