This question already has answers here:
Make child process spawned with system() keep running after parent gets kill signals and exits
                                
                                    (2个答案)
                                
                        
                                在8个月前关闭。
            
                    
程序processA是Linux服务,由“ systemctl start processA”启动。
此过程将调用std::system运行Shell脚本来升级软件。
该脚本将先运行“ systemctl”以停止processA,然后替换一些可执行文件,最后重新启动processA

问题是,当执行“ systemctl stop processA”时,脚本也会终止。
怎么解决呢?

我试图在终端中运行脚本文件;有用。因此,脚本没有问题。

  //this is how the script is called
  int rs = std::system("/usr/bin/update_server.sh upgrade \"/tmp/firmware\" > \"/tmp/upgrade.log\" 2>&1");

最佳答案

systemd还将杀死子进程(毕竟,这通常是需要的),因此您无法从该服务进行升级。

但是,您可以创建oneshot service来升级与主服务冲突的二进制文件。要升级,请停止该服务,运行升级服务,然后再次启动该服务。

07-28 08:51