我有一个 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来优雅退出。