如何运行将停止当前进程的shell?

时间:2019-06-28 07:03:55

标签: linux shell systemctl

程序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");

1 个答案:

答案 0 :(得分:0)

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

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