#objective-c #macos #cocoa #process #nsworkspace
#objective-c #macos #cocoa #процесс #nsworkspace
Вопрос:
Я использовал метод, описанный Apple для наблюдения за временем жизни процесса без опроса, для наблюдения за произвольными процессами.
Я использовал точный исходный код, упомянутый там, и со всеми тремя методами. Но ответ очень медленный и иногда даже не работает.
Чего-нибудь не хватает в документации?
Комментарии:
1. Последняя редакция этой статьи 2008 года… это как 20 собачьих лет. Какое приложение вы пишете (т. Е. Это приложение с графическим интерфейсом или демон или агент)? Метод NSWorkspace все еще должен работать, но прошло много лет с тех пор, как я его пробовал, и я вижу, что уведомления доставляют некоторую новую информацию начиная с macOS 10.6.
2. Я пишу приложение, которое сообщает демону о запуске или закрытии произвольных процессов.
Ответ №1:
Аааа… вы дали мне ключевое слово, которое я искал. Вы хотите отслеживать процессы, а не приложения. Вы не можете использовать решение NSWorkspace, если пытаетесь перехватить приложения, отличные от AppKit, или процессы командной строки в дополнение к обычным приложениям Macintosh.
Попробуйте сосредоточиться на решении kqueue.
И если это не очень хорошо, посмотрите раздел «Сервис-ориентированная альтернатива» в вашей технической записке Apple. Если вы немного переосмыслите свой подход, возможно, вы сможете использовать launchd для выполнения того, что вы пытаетесь сделать.
Комментарии:
1. Я попробовал решение NSWorkspace для отслеживания приложений Appkit. Время отклика ужасно и ненадежно. Я также пробовал решение kqueue, но оно не реагировало. Может быть, я делаю что-то не так. Я попробую еще раз.
2. Используя kqueue, я могу управлять завершением процесса. Но не запуск процесса. Есть ли у вас какие-либо идеи, как kqueue можно использовать для управления событием запуска?