我一直在寻找一种在python中启动和终止长时间运行的“批处理作业”的方法。现在我正在使用“os.system()”在每个子进程中启动一个长时间运行的批处理作业。正如您可能已经猜到的那样,“os.system()”在子进程(孙子进程?)中产生了一个新进程,因此我不能从祖父进程中终止批处理作业。为我刚才描述的内容提供一些可视化:
Main (grandparent) process, with PID = AAAA
|
|------> child process with PID = BBBB
|
|------> os.system("some long-running batch file)
[grandchild process, with PID = CCCC]
所以,我的问题是我无法从祖父母那里杀死孙子的过程......
我的问题是,有没有办法在子进程中启动长时间运行的批处理作业,并且能够通过终止子进程来终止该批处理作业? 我可以使用os.system()的替代方法,以便从主进程中删除批处理作业?
谢谢!
答案 0 :(得分:3)
subprocess模块是在Python中生成和控制进程的正确方法。
来自文档:
子进程模块允许您 产生新的进程,连接到他们的 输入/输出/错误管道,并获得 他们的退货代码。 此模块 打算取代其他几个, 较旧的模块和功能,例如:
<强>使用os.system 强>
os.spawn
os.popen
popen2
命令
所以...如果您使用的是Python 2.4+,subprocess
将取代os.system
要停止流程,请查看terminate()
个对象的communicate()
和Popen
方法。
答案 1 :(得分:2)
如果您使用的是兼容Posix的系统(例如,Linux或OS X),并且在子进程后不必运行Python代码,请使用os.execv
。通常,请避免使用os.system
并使用subprocess
模块。
答案 2 :(得分:-1)
如果要控制子进程的启动和停止,则必须使用线程。在这种情况下,只需看看Python的threading
模块。