2012-04-16 42 views
4

如果我終止我自己,只需使用[NSApp terminate: nil],它工作得很好。但是,如果我想終止另一個進程,例如活動監視器,我該怎麼辦?由Cocoa終止一個流程

要獲得的進程列表,我用

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

我說得對不對?但我怎樣才能終止一個可可過程,不使用killKillProcess(<#const ProcessSerialNumber *inProcess#>)killpd或類似的東西,我剛開始學習可可,所以也許我需要一些簡單的示例代碼或一些關鍵字,可以幫助我找到文檔。感謝您的幫助。

回答

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,您可以使用其他方法使此過程更簡單,具體取決於您是基於包ID還是PID搜索進程。

+0

A小調挑剔,但並不是 '如果([APPNAME isEqualToString:[[應用executableURL] lastPathComponent]] == YES)' 相當於 '如果([APPNAME isEqualToString:[[應用executableURL] lastPathComponent] ])' ? – 2012-04-16 15:39:57

+0

恩,是的,它顯然會做同樣的事情。 – 2012-04-16 17:30:54

+0

非常感謝。我看到它[鏈接](https://developer.apple.com/library/mac/#documentation/AppKit/Reference/NSRunningApplication_Class/Reference/Reference.html#//apple_ref/occ/cl/NSRunningApplication),我不確定爲什麼我不能依靠這個來比較進程,並且如果在工作空間中有一些名字相同的進程,我該怎麼做? – RetVal 2012-04-17 04:56:20