你如何等待OS X中的应用程序关闭?

时间:2012-04-01 18:56:07

标签: macos cocoa osx-lion osx-snow-leopard

我使用下面的代码检查应用程序是否正在运行并关闭它。有人可以提供一个如何请求应用程序calose并等待它关闭然后继续进行的示例吗?

+ (BOOL)isApplicationRunningWithName:(NSString *)applicationName {
    BOOL isAppActive = NO;
    NSDictionary *aDictionary;
    NSArray *selectedApps = [[NSWorkspace sharedWorkspace] runningApplications];

    for (aDictionary in selectedApps) {
        if ([[aDictionary valueForKey:@"NSApplicationName"] isEqualToString: applicationName]) {
            isAppActive = YES;
            break;
        }
    }
    return isAppActive;
}

+ (void)stopApplication:(NSString *)pathToApplication {
    NSString *appPath = [[NSWorkspace sharedWorkspace] fullPathForApplication:pathToApplication];
    NSString *identifier = [[NSBundle bundleWithPath:appPath] bundleIdentifier];
    NSArray *selectedApps = [NSRunningApplication runningApplicationsWithBundleIdentifier:identifier];
    // quit all
    [selectedApps makeObjectsPerformSelector:@selector(terminate)];
}

3 个答案:

答案 0 :(得分:3)

您可以使用Key-Value Observing来观察每个正在运行的应用程序的terminated属性。这样,您将在每个应用程序终止时收到通知,而无需轮询。

答案 1 :(得分:1)

一种方法是定期在计时器上调用isApplicationRunningWithName,并等待该函数返回NO

答案 2 :(得分:0)

命令行timelimit会让你发送一个关闭信号到应用程序,等待x秒,然后杀死它(或发送你喜欢的任何其他信号,杀死是-9)如果没有服从“警告” “信号。

(注意:我没有尝试在Mac上编译它,但我相信它是相当符合POSIX的代码,而不是特定于Linux的,因为它在BSD和其他人上运行。)