2012-04-16 53 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