macos - 守护进程与 cocoa

标签 macos cocoa daemon launchd

我编写了一个 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/

相关文章:

node.js - 更新了 NPM 但仍显示为旧版本

cocoa - 遍历 NSManagedObjectContext 对象?

cocoa - 自定义 View 应该如何更新模型对象?

logging - 如何不创建 docker 容器日志?

node.js - 是否可以使用 ruby​​ 附加到正在运行的后台进程?

linux - 从 ifconfig 输出中提取 MAC 地址

macos - CATiledLayer绘制层:inContext always being called on Main thread - MacOS El Capitan

objective-c - 想要一个关于如何在 Cocoa/Objective-C 中连接到 SQLite 数据库的简单概述

ios - 如何快速处理推送通知?