我正在为 OS X 上的守护进程实现自我更新程序。更新以 .pkg 文件的形式发布,所以我要做的事情如下:当通知守护进程有可用更新时,它通过 system() 调用调用安装程序来安装软件包。该软件包包含一个较新版本的守护程序、一个停止守护程序的升级前脚本 ( launchctl unload /Library/LaunchDaemons/foo.plist
) 和一个在安装新版本后启动它的 postflight 脚本。我遇到的问题是安装程序过早退出。我怀疑这可能是因为安装程序为了更新它而杀死了它的父进程,然后自己被杀死而不是继续作为它自己的孤立进程。我试过以下没有运气:
- 使用“&”后挂安装程序命令以在后台运行它
- 使用nohup包装安装程序命令
当我从命令行运行安装命令时,安装命令始终如一地完成,而从安装程序运行时始终失败。当从安装程序调用时,我将输出通过管道传输到一个文件,有时它什么都没有,有时它显示安装在输出停止之前完成了大约 41%。关于如何弄清楚进程发生了什么或确保它在没有父进程的情况下保持活力的任何想法?