Нужен способ программно определить, является ли процесс оконным процессом с использованием идентификатора процесса. Это должно работать как для пользовательских, так и для системных процессов.Учитывая идентификатор процесса, определите, является ли процесс процессом оконным на Mac
С помощью грубого метода, приведенного ниже, можно определить, окончен ли процесс пользователя. Однако у этого есть главный недостаток, он будет работать только для пользовательских процессов, а не для системы.
- (BOOL)processIsWindowed:(pid_t)processID {
for (NSRunningApplication app in [[NSWorkspace sharedWorkspace] runningApplications]) {
if(app.processIdentifier == processID && (app.activationPolicy == NSApplicationActivationPolicyRegular)){
return YES;
}
}
return NO;
}
Использование:
static int GetBSDProcessList(kinfo_proc **procList, size_t *procCount){}
из Using NSWorkspace to get all running processes
будут перечислены все процессы, но я не могу immediatgely видеть способ определить, является ли это оконном процесс.
Процесс, указанный указанным выше методом, имеет флаги (i.e. process->kp_proc.p_flags)
, но я не вижу никаких флагов: https://opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/sys/proc.h, которые могут указывать на него как оконный процесс.
Пожалуйста, покажите ваши усилия исследования/отладки до сих пор. Сначала прочитайте страницу [Ask]. –
Добавлено несколько деталей. – user3564870