Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 通过PID验证程序是否仍在运行?GetProcessForPID失败_Objective C_Macos_Cocoa - Fatal编程技术网

Objective c 通过PID验证程序是否仍在运行?GetProcessForPID失败

Objective c 通过PID验证程序是否仍在运行?GetProcessForPID失败,objective-c,macos,cocoa,Objective C,Macos,Cocoa,所以我基本上只想知道一个外部应用程序何时启动和关闭 现在我正在运行一个循环来检查: - (BOOL)isRunning:(int)AppPid{ ProcessSerialNumber psn = { kNoProcess, kNoProcess }; OSStatus err = GetProcessForPID(AppPid, &psn); if ( err != noErr ){ NSLog(@"Error %d", err);

所以我基本上只想知道一个外部应用程序何时启动和关闭

现在我正在运行一个循环来检查:

- (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次并不明智)

我的问题-是否有其他简单的方法通过cocoa/Objective-C 确定进程是否正在运行(不涉及系统任务 打电话给ps,因为每秒打50次是不明智的)


您可以使用apple示例代码(),缓存它,然后检查它。这样,您只会收到一个进程列表调用。

[NSRunningApplication runningapplication withprocessidentifier:][/code>

如果您想知道特定应用程序何时启动和退出,您可以监听NSWorkspace上的一些通知,特别是
NSWorkspaceDidLaunchApplicationNotification
NSWorkspaceDidTerminateApplicationNotification


然后,您可以检查通知的
userInfo
字典中的
NSWorkspaceApplicationKey
,以检索与启动或终止的应用程序相对应的
NSRunningApplication
,您可以通过bundle ID(或其他)匹配该应用程序确定您是否感兴趣的应用程序。

我假设询问者希望范围是其他流程,而不仅仅是应用程序。