Фоновый процесс отображается как "не отвечает" в 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 (мое наблюдение).