2012-04-16 3 views
4

Если я завершаю себя, просто используйте [NSApp terminate: nil], он работает очень хорошо. Но если я хочу закончить другой процесс, такой как активный монитор, что мне делать?Завершить процесс с помощью Cocoa

Чтобы получить список процессов, я использую

NSArray* processlist = [[NSWorkspace sharedWorkspace] runningApplications]; 

я прав? Но как я могу завершить процесс Cocoa, не использовать kill или KillProcess(<#const ProcessSerialNumber *inProcess#>) или killpd или что-то в этом роде, я просто начинаю изучать Cocoa, поэтому, возможно, мне нужен простой примерный код или некоторые ключевые слова, которые могут помочь мне найти документы. Спасибо за помощь.

ответ

5

-[NSWorkspace runningApplications] возвращает массив из NSRunningApplication объектов. NSRunningApplication имеет способ -[NSRunningApplication terminate]. Так что если вы ищете конкретное приложение, вы могли бы прекратить это так:

-(void)killProcessesNamed:(NSString*)appName 
{ 
    for (id app in [[NSWorkspace sharedWorkspace] runningApplications]) 
    { 
     if ([appName isEqualToString:[[app executableURL] lastPathComponent]]) 
     { 
      [app terminate]; 
     } 
    } 
} 

Вы также могли бы назвать forceTerminate заставить приложение, чтобы выйти без нормального процесса отказа от курения. (Он не будет просить сохранить изменения и т. Д.)

Существуют и другие методы NSRunningApplication, которые вы можете использовать, чтобы упростить этот процесс в зависимости от того, ищете ли вы процесс, основанный на идентификаторе пакета или PID ,

+0

Незначительные придирка, но не ', если ([APPNAME isEqualToString: [[Приложение executableURL] lastPathComponent]] == ДА)' эквивалентно ' , если ([APPNAME isEqualToString: [[Приложение executableURL] lastPathComponent] ]) ' ? –

+0

Ум, он будет делать то же самое точно. –

+0

Большое спасибо. И я вижу это [ссылка] (https://developer.apple.com/library/mac/#documentation/AppKit/Reference/NSRunningApplication_Class/Reference/Reference.html#//apple_ref/occ/cl/NSRunningApplication) на этой странице, и я не уверен, почему я не могу полагаться на это для сравнения процессов, и если в рабочей области есть какой-то процесс с тем же именем, как мне это сделать? – RetVal

Смежные вопросы