【发布时间】:2012-08-04 01:12:52
【问题描述】:
我正在为 OS X 上的守护进程实现自我更新程序。更新以 .pkg 文件的形式发布,所以我想要做的事情如下:
当通知守护程序有可用更新时,它会通过 system() 调用调用installer 来安装软件包。该软件包包含更新版本的守护程序、停止守护程序的升级前脚本 (launchctl unload /Library/LaunchDaemons/foo.plist),以及在安装新版本后启动备份的 postflight 脚本。我遇到的问题是安装程序过早退出。我怀疑这可能是因为安装程序为了更新它而杀死了它的父进程,然后自己被杀死而不是继续作为它自己的孤立进程。我试过以下没有运气:
- 使用 '&' 将安装程序命令后置以在 背景
- 用nohup包装安装程序命令
当我从命令行运行安装命令时,安装命令始终如一地完成,而从安装程序运行时始终失败。当从安装程序调用时,我将输出通过管道传输到一个文件,有时它什么都没有,有时它显示安装在输出停止之前完成了大约 41%。关于如何弄清楚进程发生了什么或确保它在没有父进程的情况下仍然存在的任何想法?
【问题讨论】:
-
是否应该像那样卸载和加载守护进程?似乎您可以替换守护进程的可执行文件,然后让守护进程自行终止,以便 launchd 重新启动它,但会获得新版本。
标签: c++ macos process installation daemon