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

我试图用我们的OS X应用程序来解决这个奇怪的问题。

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

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

尽pipe如此,它仍然正常运行,响应来自Web浏览器的请求,而不是吃大量的CPU或任何东西。

我想了解究竟是什么原因可能导致这个状态被显示,因为它甚至不是一个GUI应用程序。 如果没有Cocoa事件循环,OS X如何确定命令行应用程序是否没有响应?

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

提前致谢。

更新:刚刚检查,从命令行启动任务似乎也发生。 什么使活动监视器上的后台应用程序“不响应”?

正如塞尔吉奥在他的评论中指出的那样,这确实是Node.JS特有的东西。

负责我们应用的Node.JS部分的开发人员能够追溯到Node.JS中process.title属性的使用情况process.title

看起来libuv中的process.title实现了许多Core Foundation的技巧来设置进程标题,所以这些可能会通过Activity Monitor用来告诉Cocoa应用程序不同于CLI的任何启发式方法来标记为GUI应用程序应用。

我们已经提交了关于libuv的错误报告 ,但是现在我们跳过了process.title ,只需设置它,服务器在几分钟后就会在Activity Monitor上显示为“not responding”。

更新:现在在libuv中修正了这个提交 。 它还没有传播到一个节点版本。

根据苹果的进程pipe理器参考 , GetCurrentProcessGetFrontProcess (等)在OS X 10.9弃用,导致活动监视器(我的观察)“没有响应”的问题。

Interesting Posts