如何从OSX 10.9中的ProcessSerialNum获取PID?

时间:2014-03-18 17:23:43

标签: objective-c macos pid nsrunningapplication

GetProcessPID在OSX 10.9中被标记为已弃用以及注释:

  

使用相应的processIdentifier属性   NSRunningApplication对象。

问题是NSRunningApplication的构造类方法无法通过NSRunningApplication获取ProcessSerialNum,只能通过PID或包名称。

捆绑名称太模糊(可能有多个实例),我没有PID(这就是我想要的)。

在OSX 10.9中,有没有办法在你有PSN时获得PID?

2 个答案:

答案 0 :(得分:2)

观察NSWorkspaceDidLaunchApplicationNotification通知。

在回调中,获取进程序列号,如下所示:

NSDictionary* dictionary = [notification userInfo];
NSNumber* psnLow = [dictionary valueForKey: @"NSApplicationProcessSerialNumberLow"];
NSNumber* psnHigh = [dictionary valueForKey: @"NSApplicationProcessSerialNumberHigh"];
ProcessSerialNumber psn;
psn.highLongOfPSN = [psnHigh intValue];
psn.lowLongOfPSN = [psnLow intValue];
NSRunningApplication *newApplication = [dictionary valueForKey:NSWorkspaceApplicationKey];

source

答案 1 :(得分:1)

如果您使用类runningApplicationsWithBundleIdentifier的方法NSRunningApplication,您将获得NSRrrayApplication的NSArray。 然后,您可以读取这些对象的属性(包URL,本地化名称...)以标识您感兴趣的对象,最后获取其PID。