所以我基本上只是想知道外国应用程序何时启动和关闭。
现在我正在运行一个检查这个的循环:
- (BOOL)isRunning:(int)AppPid{
ProcessSerialNumber psn = { kNoProcess, kNoProcess };
OSStatus err = GetProcessForPID(AppPid, &psn);
if ( err != noErr ){
NSLog(@"Error %d", err);
return NO;
}
return YES;
}
我遇到的问题是,如果我过多地调用此函数(比如说一秒钟50次),它最终会失败并说该过程没有运行,当它实际上是
这可能每10分钟发生一次,或连续发生5次,这是不可预测的。
我的问题 - 是否有另一种简单的方法可以通过Cocoa / Objective-C来确定进程是否正在运行(这不涉及调用ps的系统任务,因为这样做50次/秒不是智能)?
答案 0 :(得分:3)
有[NSRunningApplication runningApplicationWithProcessIdentifier:]
。
如果您想知道特定应用程序何时启动和退出,您可以在NSWorkspace上收听一些通知,特别是NSWorkspaceDidLaunchApplicationNotification
和NSWorkspaceDidTerminateApplicationNotification
。
然后,您可以检查通知的NSWorkspaceApplicationKey
词典的userInfo
,以检索与已启动或已终止的应用程序对应的NSRunningApplication
,您可以通过捆绑ID(或其他)匹配该应用程序确定它是否是您感兴趣的应用程序。
答案 1 :(得分:1)
我的问题 - 通过cocoa / Objective-C还有另一种简单方法 确定进程是否正在运行(不涉及系统任务) 调用ps,因为这样做50次/秒并不聪明。)
你可以使用苹果示例代码(GetBSDProcessList),缓存它,并检查它。这样,您只能获得一个进程列表的调用。