在Python中以编程方式执行和终止长时间运行的批处理流程
我一直在寻找一种方法来启动和终止在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()”的方法可以让我从主进程中杀掉这个批处理任务?
谢谢!!
3 个回答
-1
如果你想控制子进程的开始和停止,就需要使用线程。在这种情况下,可以看看Python的threading
模块。
2
如果你在一个兼容Posix的系统上(比如Linux或者OS X),并且在子进程运行后不需要再执行任何Python代码,那就可以使用os.execv
。一般来说,尽量避免使用os.system
,而是使用subprocess
模块。
3
subprocess模块是用来在Python中创建和控制进程的正确方法。
根据文档的介绍:
subprocess模块让你可以 创建新的进程,连接到它们的 输入/输出/错误管道,并获取 它们的返回代码。这个模块 旨在取代几个其他的、 旧的模块和函数,比如:
os.system
os.spawn
os.popen
popen2
commands
所以... 如果你使用的是Python 2.4及以上版本,subprocess
就是os.system
的替代品。
要停止进程,可以查看Popen
对象的terminate()
和communicate()
方法。