V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
monkeyWie
0.65D
V2EX  ›  问与答

客户端软件一般是通过什么方式来实现在线升级的?

  •  
  •   monkeyWie · Jan 6, 2020 · 1367 views
    This topic created in 2303 days ago, the information mentioned may be changed or developed.

    据我了解有父子进程模式,升级完将子进程程序文件替换,然后再由父进程关闭旧的子进程并再运行刚刚替换的子进程文件,也就是说父进程只是一个壳,所有的逻辑都是在子进程上实现。

    不知道除了这种方式还有没有什么方式可以实现,比如单进程下的在线升级是否可行?

    lff0305
        1
    lff0305  
       Jan 6, 2020
    可行也是你说的那种况的变种,因为这个进程已经在运行,那么必须退出才能对其覆盖( 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 退出。
    monkeyWie
        2
    monkeyWie  
    OP
       Jan 6, 2020
    @lff0305 这个 loader 有什么好的实现方法吗,从 main 进程存一个 loader 文件临时写出来吗 🤣
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5781 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:08 · PVG 16:08 · LAX 01:08 · JFK 04:08
    ♥ Do have faith in what you're doing.