我希望使用 & 符号提交我的长时间运行的 Python 作业。我将通过使用子进程调用它从交互式 Python 程序启动此过程。
如果我想从菜单选项结束作业,我该如何以编程方式跟踪已提交的作业?
Example of interactive program:
Main Menu
1. Submit long running job &
2. End long running job
subprocess
模块,那么你不需要再使用&
将其后台化,对吧?你只需要保留Popen
对象以跟踪作业,它会在其他Python进程继续运行时运行。pgrep
/pkill
是否适用?或者,你可以让长时间运行的作业记录其PID,通常在/var/run下,然后使用该PID来跟踪进程是否仍然存活和/或发送信号。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