Определите, когда другой процесс завершает работу OSX

Мне нужен способ определить из приложения Какао, работает ли заданное имя процесса. У меня была идея использовать NSTask и опросить с помощью ps aux | grep processName. Есть ли лучшее решение?

5 ответов

Если вы используете Snow Leopard, вы можете взглянуть на класс NSRunningApplication, особенно на метод + runningApplicationWithProcessIdentifier:

Вы должны быть в состоянии легко адаптировать этот пример кода для поиска процесса по имени:

http://developer.apple.com/mac/library/samplecode/PIDFromBSDProcessName/listing1.html

Вы можете использовать API-интерфейс Process Manager для циклического прохождения всех запущенных процессов с помощью GetNextProcess и использовать CopyProcessName для получения имени процесса. Обратите внимание, что этот метод не решает проблему наблюдения при запуске процесса.

Если вам необходимо проверить, что процесс выполняется в течение некоторого времени (а не в одно мгновение), взгляните на Техническую ноту 2050: наблюдение за временем жизни процесса без опроса. Некоторые из техник в технической заметке имеют ограничения: они позволяют вам контролировать только процессы графического интерфейса в текущем сеансе входа в систему. Однако kqueues может быть именно тем, что вы ищете: они позволяют вам контролировать один процесс любого рода.

Я использовал GetBSDProcessList() функционировать довольно успешно в несколько раз.

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