我有一个使用 python3 的 Flask 应用程序。有时它会创建守护进程来运行脚本,然后我想在超时时终止守护进程(使用 signal.SIGINT
)。
但是,一些由 os.system
创建的进程(例如,os.system('git clone xxx')
)在守护进程被杀死后仍在运行。
所以我该怎么做?谢谢大家!
最佳答案
为了能够终止一个进程,您需要它的进程 ID(通常称为 pid)。 os.system
没有给你,只是返回子进程返回码的值。
较新的 subprocess
模块为您提供了更多的控制权,但代价是更加复杂。特别是它允许您等待进程完成,如果需要超时,并允许您访问子进程的 pid。虽然我不是它的使用专家,但这似乎
工作。请注意,此代码需要 Python 3.3 或更高版本才能将 timeout
参数用于 Popen.wait
调用。
import subprocess
process = subprocess.Popen(['git', 'clone', 'https://github.com/username/reponame'])
try:
print('Running in process', process.pid)
process.wait(timeout=10)
except subprocess.TimeoutExpired:
print('Timed out - killing', process.pid)
process.kill()
print("Done")
关于python - 如何杀死由 python os.system() 创建的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43322201/