启动应用程序作为守护程序 - Mac OS X.

时间:2015-05-01 18:41:39

标签: macos launchd

我的应用是一个Web服务器。它作为服务在Windows上运行,在Linux上作为守护进程运行。对app的支持就在app本身内部。 e.g。

MyWebServer -s

在Windows上安装并作为服务运行

MyWebserver -d 

在Linux上将其作为守护进程运行(虽然也可以使用脚本)

在Mac OS X上,所有帖子都指向

launchctl

需要plist xml文件

我只想让我的用户输入

sudo ./MyWebServer -s

它应该自动安装MyWebServer实例作为“launchd”守护进程设置为从计算机开始并在后台静默运行。

我见过一些没有任何plist xml文件的应用程序。如何在应用程序中添加对该文档的支持。我的服务器是用C / C ++编写的

编辑:我不想在OS X中使用fork方法而是使用推荐的launchd守护程序

3 个答案:

答案 0 :(得分:1)

如果您希望将进程作为deamon运行,只需将其从终端中分离即可。通常最小的方法是:

if (fork()!=0) {
  exit(0);
}
// do the job

这将创建一个将由init采用的孤儿进程。

如果您想提供启动时间启动和launchd控制,请查看OSX上的/Library/LaunchDaemons

答案 1 :(得分:1)

您可以尝试调用launchctl并使用其submit选项,该选项可让您在没有配置文件的情况下提交程序。读这个男人更多。

答案 2 :(得分:0)

您似乎很难理解,在OSX中在用户看不见的背景下在后台运行启动守护程序,就像在窗口中创建带有一行文本的服务一样简单。这只是Windows令人震惊的安全性原因之一,而恶意软件就像是开放的马戏团尿液一样可以在其中运行。

您说的是用C ++编写的代码并符合OSX,但这并不意味着将可疑的守护程序列入启动列表是合法的。

您需要将已编译的程序复制到主文件夹。 然后,您需要为其创建一个.plist文件,其中包含所有正确的详细信息。 然后将.plist文件复制到/ launchdaemons目录(需要root访问) 然后,您将再次需要root用户访问权限,才能在新位置使用plist文件的chroot注册和更改所有权。 最后直接使用启动本身进行注册(需要root访问)

如果您的守护程序正在做任何高度可疑的事情,加载/卸载kext模块或编辑此类重要文件,则SIP将拒绝它,您将A)转到Apple并获得认证,或者B)手动禁用SIP手动处于恢复模式