后台进程在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理器参考 , GetCurrentProcess
, GetFrontProcess
(等)在OS X 10.9弃用,导致活动监视器(我的观察)“没有响应”的问题。