我在cocoa中开发一个应用程序,需要检查该应用程序是否已经在启动时运行。如果已经运行,那么我需要退出新实例..有什么办法可以做到这一点。寻找一个完美的解决方案
答案 0 :(得分:5)
听起来你说你想让你的cocoa应用程序的多个实例同时运行。通常,cocoa应用程序不允许多个实例同时运行,因此通常您不需要执行此检查。是否存在某些特定情况,您发现可可应用程序同时运行?
一般来说,一个cocoa方法可以解决这个问题,看看NSWorkspace中的launchApplications。这将返回一个NSArray,其中包含每个已启动应用程序的字典。您可以遍历数组以查看您要查找的应用程序是否已在运行。我建议您使用值为NSApplicationBundleIdentifier的值,该值将具有“com.mycompany.myapp”之类的值,而不是查找名称。如果您需要查找应用程序的软件包标识符,可以查看应用程序包中的info.plist文件。
答案 1 :(得分:0)
我的答案不是针对object-c实现的,而是作为一般方法。在* nix之类的系统中,守护进程通常会在某处创建一个pid文件来指示它的存在。如果守护程序不允许多个实例,则应用程序的另一次激活应首先检查是否存在这样的pid文件,如果存在,则自身存在。
答案 2 :(得分:0)
你可以popen()ps命令的一个实例并查找应用程序名称。如果你找到它,关闭新的。也许不是最快的方式,但它有效: - )