Определите, когда другой процесс завершает работу 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()
функционировать довольно успешно в несколько раз.