我编写了一个 FTP 服务器,它是通过 ftpd.command 从命令行启动的。 现在我想从 Cocoa 应用程序运行该命令。
我想退出应用程序,命令应保持运行。 当我返回 Cocoa 应用程序时,它应该知道 FTP 服务器是否仍在运行。
有人可以帮助我吗? 多谢! 朱利安
最佳答案
您应该使用launchd
来处理FTP服务器。它是专门为您描述的情况而设计的,即启动和管理后台服务。
您需要创建一个 launchd
配置文件,可以将其放置在以下位置之一:
~/Library/LaunchAgents
:用户提供的每用户代理。/Library/LaunchAgents
:管理员提供的每用户代理。/Library/LaunchDaemons
:由 管理员。
守护进程是一种系统范围的服务,所有客户端都有一个实例。 代理是一种基于每个用户运行的服务。
launchd
Configuration files形式为property list.
您需要创建一个 launchd
配置 plist 并将其放置在上述位置之一。您可以配置 plist,以便 launchd
在启动时或定期运行您的服务,或者响应各种操作(例如文件夹内容更改)。
要检查您的作业是否正在运行,您需要使用 Service Management framework 。您可以向 launchd
询问您的作业状态,如下所示:
CFDictionaryRef jobDict = SMJobCopyDictionary(kSMDomainUserLaunchd, CFSTR("com.your.apps.bundle.id"));
如果找不到作业,则 jobDict
将为 NULL
。
(如果您使用的是系统级守护程序,则可以将 kSMDomainUserLaunchd
替换为 kSMDomainSystemLaunchd
)。
关于macos - 守护进程与 cocoa ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8286416/