osx - 如何以编程方式获取进程ID(PID)?

时间:2011-06-02 13:23:01

标签: macos process kill pid

如何获取流程ID?我需要ID以杀死该进程。我知道这个过程的名称。

谢谢!

5 个答案:

答案 0 :(得分:4)

最好的方法是使用-[NSWorkspace launchedApplications]用于10.5和 - [NSWorkspace runningApplicattions]用于10.6多个应用。一个返回带有指定键的字典,包括进程ID和包名称和位置信息(如果可用),另一个返回NSRunningApplication对象。

答案 1 :(得分:2)

首先,进程名称不能唯一标识进程。可能有许多具有相同名称的进程,或者进程甚至可以在您看到它们时更改其名称(即PostgreSQL服务器正在分叉和更改argv [0],因此您可以看到谁是主人,谁在工作进程等)。但无论如何,您需要一个API来列出流程并获取他们的详细信息 - procps将为您完成。

更新:哦,我第一次没注意到OSX。对于OS X,您必须使用NetBSD API(不要问)。请参阅KVM (Kernel Data Access Library)文档。 API不同,这个想法仍然是一样的。

答案 2 :(得分:2)

let pid: Int32 = ProcessInfo.processInfo.processIdentifier
print("pid: \(pid)")

答案 3 :(得分:1)

快速破解:向killall发出一个shell调用,它会按名称杀死进程。

答案 4 :(得分:1)

使用NSRunningApplication

NSArray *runningApplications = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.bundleIdentifier"];
if (runningApplications.count == 1) {
    NSRunningApplication *app = runningApplications[0];
    pid = [app processIdentifier];
}

注意:-[NSWorkspace launchedApplications]已弃用10.6及以上。