据我了解有父子进程模式,升级完将子进程程序文件替换,然后再由父进程关闭旧的子进程并再运行刚刚替换的子进程文件,也就是说父进程只是一个壳,所有的逻辑都是在子进程上实现。
不知道除了这种方式还有没有什么方式可以实现,比如单进程下的在线升级是否可行?
1
lff0305 2020-01-06 12:46:31 +08:00
可行也是你说的那种况的变种,因为这个进程已经在运行,那么必须退出才能对其覆盖( Win 上,可能 Linux 更简单),总之需要一个 loader/wrapper 这类东西。这个 loader 可能是持久的,也可能是发现有升级包之后临时释放的(升级后自动删掉)。比如下面的过程:
1. main.exe 发现网上有升级包,下载; 2. 释放一个临时的 loader 并运行 (设置 loader 进程的父进程为 null,防止 main 退出 loader 也退出)。main.exe 退出 3. loader 等待 main.exe 退出 4. loader 用下载的升级包 升级 5. loader fork 新的 main.exe 进程 (设置新的 main.exe 进程的父进程为 null,防止 loader 退出 main 也退出) 6. loader 退出。 |