如何重新加载后台进程?

如何重新加载后台进程?

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

$ nohup python script.py &

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

$ kill -9 <pid_of_bg_process>
$ nohup python script.py &

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

答案1

简短的回答 - 不。

长答案:你实际上是在调用 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

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

如果终止包装器进程,Python 脚本也会终止。

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

答案2

你可以使用kill -USR1 PID或者pidof script.py-9来终止进程,尝试-15来优雅退出。

相关内容