后台进程在OS X上显示为“无响应”

时间:2013-10-18 19:28:15

标签: macos node.js cocoa background-process activity-monitor

我正在尝试使用我们的OS X应用程序解决这个奇怪的问题。

作为正常操作的一部分,它启动一个长时间运行的后台进程 - 特别是一个用node.js编写的Web服务器。

运行一段时间后,后台进程会在活动监视器中显示为“无响应”。

它仍然正常运行,响应来自网络浏览器的请求而不是吃掉高比例的CPU或任何东西。

我想了解究竟是什么原因导致显示此状态,因为它首先不是GUI应用程序。 OS X究竟用什么来确定命令行应用程序是否没有响应,如果它没有Cocoa事件循环?

是否有可能以某种方式将其标记为后台进程,以便系统不会查询它以获取响应?

提前致谢。

更新:刚刚检查过,从命令行启动任务时似乎也是如此。是什么让活动监视器上的后台应用程序“无响应”?

2 个答案:

答案 0 :(得分:4)

好的,sergio在他的评论中指出,这确实是Node.JS特有的。

负责我们应用程序的Node.JS部分的开发人员能够追溯问题的根源,以便在Node.JS中使用process.title属性。

看起来the implementation of process.title in libuv做了许多Core Foundation设置流程标题的技巧,所以这些可能会通过Activity Monitor用来告诉Cocoa应用程序除CLI之外的任何启发式方法将该流程标记为GUI应用程序应用

我们已经在libuv上提交了一个bug report,但是现在我们正在跳过process.title因为只是设置它会导致服务器在活动监视器上显示为“没有响应”几分钟。

更新:现在已在this commit的libuv中修复此问题。它还没有传播到节点版本。

答案 1 :(得分:1)

根据Apple's Process Manager ReferenceGetCurrentProcessGetFrontProcess(等人)在OS X 10.9中已弃用,导致"无响应"活动监视器中的问题(我的观察)。