Launchd 的替代方案

Launchd 的替代方案

我正在编写一个使用库的应用程序,当该应用程序作为 launchd 守护进程运行时,该库将无法工作。该库中有一个错误,当从守护进程使用时,它会引发总线错误。(请参阅我的 stack overflow 帖子:https://stackoverflow.com/questions/20599283/signal-10-sigbus-in-c-library-when-running-application-as-launchd-daemon

但是,当我正常运行应用程序时,一切都正常。我想知道是否有任何 launchd 的替代方案我应该考虑。应用程序需要在启动时启动并运行,即使没有用户登录也是如此。如果应用程序崩溃,最好重新启动它,但如果必须的话,我可以忍受没有它。

我对启动项做了一些研究,但由于它们已被弃用,我担心苹果有一天会删除该功能。

答案1

不。您很可能会遇到与您在此处提到的任何替代方案完全相同的问题。

无需过多了解堆栈跟踪中显而易见的内容,这是 StackOverflow 领域:

问题几乎肯定是由于守护进程与从桌面或 shell 运行的程序具有不同的进程状态。环境变量、当前目录、资源限制、打开的文件句柄、控制终端、根目录,甚至补充组在守护进程管理器运行的守护进程和登录会话中调用的进程中可能有所不同(其中大多数确实不同)。

您的问题可能归结于两者之间的任何差异。(根据堆栈跟踪中的内容,我的有根据的猜测是环境变量。)但这些差异是守护进程监控程序所固有的。执行具有固定、可确定的进程状态的守护进程是其设计的一部分。如果您替换另一个守护进程监控程序,您仍然会得到一个受控的进程状态,该状态与您的登录会话中运行的进程状态不匹配。

您不应该考虑 的替代方案launchd。您应该查看 plist 并对其进行调整,以设置您的 ODBC 驱动程序期望可用的正确内容(可能是环境变量,正如我所说)。并且您应该阅读任何 4D doco。☺

相关内容