首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程停止或App Nap触发的线程挂起检测器

进程停止或App Nap触发的线程挂起检测器
EN

Stack Overflow用户
提问于 2014-02-22 22:58:59
回答 1查看 72关注 0票数 0

我已经编写了一个线程挂起检测器,它打印一些调试输出(回溯等)。当某个线程意外挂起时。每个想要被监视的线程在挂起检测器系统中注册自己,指定一些超时(在我的例子中是5秒),并频繁地调用一些IAmAlife()函数(在我的例子中大约每隔1-10ms)。

它工作得很好。然而,在某些情况下,我得到的是假阳性。例如,当我SIGSTOP进程并稍后恢复它时,它会被触发(例如,当连接到像GDB/LLDB这样的调试器时)。而且,当进程不做太多事情,只是空闲时,我猜MacOSX的App Nap会启动,它也会触发挂起检测器。

我怎么能检测到这样的系统挂起?查看处理器时间(clock())不会有太大帮助,因为如果我的应用程序处于死锁状态,它可能也不会消耗太多(如果有的话)处理器时间。

EN

回答 1

Stack Overflow用户

发布于 2014-02-23 00:17:01

因此,实现可能有点复杂,但基本思想很简单:跟踪挂钟时间,并使用它来计算一个“宽限期”,以添加到每个线程可以晚打电话回家的时间量。

使用诸如gettimeofday() (http://linux.die.net/man/2/gettimeofday)之类的命令来记录监视器线程第一次启动的时间。每次它重新唤醒时,再次调用gettimeofday(),取差值,然后从该差值中减去所用的“处理器时间”。这给了您应该授予的粗略的“宽限期”,因为此时您的进程并未运行。

唯一的小复杂性出现是因为需要为您正在观察的每个线程单独维护宽限期。既然您对编写线程有足够的了解,那么我就假设这部分在您的能力范围之内:-)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21955973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档