Фоновый процесс отображается как "не отвечает" в OS X

Я пытаюсь решить эту странную проблему с нашим приложением OS X.

В рамках своей нормальной работы он запускает длительный фоновый процесс - в частности, веб-сервер, написанный в файле node.js.

Через некоторое время фоновый процесс отображается в мониторе активности как "Не отвечает".

Тем не менее, он по-прежнему функционирует нормально, отвечая на запросы веб-браузера и не потребляя большой процент ресурсов процессора или чего-либо еще.

Я хотел бы понять, что именно может вызывать отображение этого статуса, так как это вообще не приложение с графическим интерфейсом. Что именно OS X использует, чтобы определить, не отвечает ли приложение командной строки, если оно не имеет цикла событий Какао?

Возможно ли пометить его как фоновый процесс, чтобы система не запрашивала ответы?

Заранее спасибо.

Обновление: только что проверил, похоже, то же самое происходит при запуске задачи из командной строки. Что заставляет фоновое приложение "Не отвечать" на мониторе активности?

2 ответа

Решение

Итак, как отметил sergio в своем комментарии, это действительно было что-то особенное для Node.JS.

Разработчик, ответственный за Node.JS часть нашего приложения, смог отследить источник проблемы до использования process.title недвижимость в Node.JS.

Похоже, реализация process.title В libuv выполняется множество трюков Core Foundation для установки заголовка процесса, поэтому они, вероятно, помечают процесс как приложение с графическим интерфейсом с помощью какой-либо эвристики, используемой Activity Monitor, чтобы отличать приложения Cocoa от приложений CLI.

Мы подали сообщение об ошибке в libuv по этому поводу, но сейчас мы пропускаем process.title если просто установить его, сервер будет отображаться как "не отвечающий" на мониторе активности через пару минут.

Обновление: теперь это исправлено в libuv с этого коммита. Это все еще не распространилось к выпуску узла еще.

Согласно справочнику менеджера процессов Apple, GetCurrentProcess, GetFrontProcess (и др.) устарели в OS X 10.9 и вызывают проблему "не отвечает" в Activity Monitor (мое наблюдение).

Другие вопросы по тегам