我想使用&符号提交我长期运行的Python作业。我将通过使用子进程调用它从交互式Python程序中取消此过程。
如果我想从菜单选项中结束作业,我将如何以编程方式跟踪提交的作业?
Example of interactive program:
Main Menu
1. Submit long running job &
2. End long running job
答案 0 :(得分:4)
如果你正在使用python的subprocess
模块,那么你真的不需要再次使用&
进行背景了吗?您可以保留Popen
对象来跟踪作业,它将在另一个python进程继续时运行。
如果您的"外部" python进程将终止你需要保留什么样的轨道? pgrep
/ pkill
会合适吗?或者,您可以让长时间运行的作业记录其PID,通常在/ var / run某处,并使用它来跟踪进程是否仍处于活动状态和/或发出信号。
答案 1 :(得分:0)
你可以使用Unix信号。在这里,我们捕获SIGUSR1
以告知流程将一些信息传达给STDOUT
。
#!/usr/bin/env python
import signal
import sys
def signal_handler(signal, frame):
print('Caught SIGUSR1!')
print("Current job status is " + get_job_status())
signal.signal(signal.SIGUSR1, signal_handler)
然后从shell
kill <pid> --signal SIGUSR1