当前位置: 首页 > 面试题库 >

Waitpid等同于超时时间?

红朝
2023-03-14
问题内容

想象一下,我有一个启动几个子html" target="_blank">进程的进程。父母需要知道孩子何时离开。

我可以使用waitpid,但是如果/当父母需要退出时,我无法告诉被阻塞的线程waitpid正常退出并加入它。自己清理一下是很高兴的,但可能没什么大不了的。

我可以waitpid与结合使用WNOHANG,然后在任意时间睡眠以防止繁忙的等待。但是,那时我只能知道孩子是否经常离开。就我而言,知道孩子何时立即离开可能并不重要,但我想尽快知道…

我可以为使用信号处理程序SIGCHLD,并在信号处理程序中执行孩子退出时要执行的任何操作,或者将消息发送到其他线程以执行某些操作。但是,使用信号处理程序会使代码流有些混乱。

我真正想做的是使用waitpid某个超时时间,例如5秒。由于退出进程不是时间紧迫的操作,因此我可以延迟发出信号退出线程,同时在waitpid其余时间仍将其阻塞,随时准备进行响应。
Linux中有这样的电话吗? 在其他选择中,哪一个是最好的?

编辑:

基于答复的另一种方法是SIGCHLD使用pthread\
阻塞所有线程_sigmask()。然后在一个线程中,继续sigtimedwait()寻找SIGCHLD。这意味着我可以在该调用上超时,并检查线程是否应该退出,如果不是,则退出线程等待信号。将a
SIGCHLD传递到此线程后,我们可以立即在等待线程中对其做出反应,而无需使用信号处理程序。


问题答案:

该函数可能会被信号中断,因此您可以在调用waitpid()之前设置一个计时器,并且在引发计时器信号时它将以EINTR退出。编辑:应该像在调用waitpid()之前调用alarm(5)一样简单。



 类似资料:
  • 在Bash脚本中,我想做如下操作: 一、 例如,在后台启动两个应用程序,并给他们60秒时间完成工作。然后,如果他们没有在这段时间内完成,就杀了他们。 不幸的是,上面的方法行不通,因为< code>timeout是一个可执行文件,而< code>wait是一个shell命令。我试着把它改成: 但是这仍然不起作用,因为< code>wait只能在同一个shell中启动的PID上调用。 有什么想法吗?

  • 问题内容: 我想知道WebDriver等待超时和隐式等待超时之间的技术差异。 问题答案: 如文档中所述: 在内部设置将用于所有连续搜索的超时。如果找不到该元素,它将尝试在指定的时间内反复查找该元素。它仅执行此操作,不能强制执行其他任何操作- 它等待元素显示。 ,或者只是您用于特定搜索的一次计时器。它具有更大的可扩展性,意味着您可以将其设置为等待可能需要的任何条件。通常,您可以使用一些预构建的元素来

  • 问题内容: 在Bash脚本中,我想执行以下操作: 即,在后台启动两个应用程序,并给它们60秒以完成其工作。然后,如果他们没有在该时间间隔内完成,请杀死他们。 不幸的是,上述内容不起作用,因为它是可执行文件,而它是Shell命令。我尝试将其更改为: 但这仍然行不通,因为只能在同一外壳程序内启动的PID上进行调用。 有任何想法吗? 问题答案: 将PID写入文件并像这样启动应用程序: 这将创建另一个hi

  • 问题内容: 我使用Node.js和TypeScript,并且使用。这是我的测试用例: 我想为整个功能设置一个超时时间。即如果要花费2秒,花费0.5秒,花费5秒,我想在3秒钟后让我抛出错误的超时。 正常调用是一个问题,因为范围丢失了: 而且我不能用普通的方式抓住它: 有关如何解决的任何想法? 问题答案: 您可以使用超时: 您必须将其包装在诺言中才能使用。

  • 问题内容: 我正在使用小型AngularJS应用测试量角器。 这是测试: 控制器: 草稿服务: 使用量角器运行此测试会导致以下错误: 但是,如果在控制器中更改此行: 对此: 测试失败,但未达到预期目的,但更重要的是:它不会超时。 启用query()时,在浏览器中手动运行应用程序以及查看Protractor打开的浏览器窗口时,转发器均会正确显示API返回的数据。 当服务与API通信时,为什么Prot

  • 问题内容: 具有以下等待声明: 它可能会因InterruptedException或超时而退出,或者由于Notify / NotifyAll方法是在另一个线程中调用而退出的,因此异常很容易捕获,但是… 有什么方法可以知道退出原因是超时还是通知? 编辑: 这是一种可行的技巧,(尽管我不喜欢) 问题答案: 除非您提供一些其他代码,否则您无法区分两者。例如,添加添加 为仅设置为的 但是首先,您必须确保您