如何重新加载后台进程?

Ani*_*esh 3 process background-process

我有一个想要在后台运行的 python 脚本。所以我这样做:

$ nohup python script.py &
Run Code Online (Sandbox Code Playgroud)

如果我经常对脚本进行更改,则需要终止进程并再次运行脚本。

$ kill -9 <pid_of_bg_process>
$ nohup python script.py &
Run Code Online (Sandbox Code Playgroud)

是否可以在不终止进程的情况下重新加载进程?

Nil*_*ils 5

简短的回答 - 不。

长答案:您实际上是在调用 python 解释器。该解释器加载 script.py 并解析它。

如果您更改脚本,它必须重新加载文件并从头开始,因为解释器无法知道更改了哪一部分。

现在,如果您的目标是简单地向 python 发出信号以重新加载/重新启动脚本,您可以将其包装到一个 shell 脚本中:

#!/bin/sh
LINE="python script.py"
stop()
{
  pkill -f "$LINE"
}
clean()
{
  stop
  exit 0
}
trap stop 1
trap clean 9 15
while true
  do
    $LINE &
    wait
done
Run Code Online (Sandbox Code Playgroud)

您现在可以启动该 shell 脚本(在后台,如果您愿意,可以使用 nohup)。如果您向它发送 HUP 信号,它将重新启动您的 python 进程。

如果您终止包装进程,python 脚本也将终止。

我没有测试我的脚本 - 但这个想法应该很清楚。