使用 Python 3.5.1,这可以在 Windows(64 位 Windows 7 Home Premium,SP1)上正常工作。但是,在 Linux(OpenSUSE 13.2、Harlequin、i586 和 KDE 4.14.9)上,使用 Python 3.4.1,任何超时进程都不会被杀死。
我的进程处理基本上是在 StackOverflow 上对Python 给出的答案:运行一个进程并在它在一小时内没有结束时终止它 (Giampaolo Rodolà,2012 年 5 月 10 日)
这是(简化的)我所做的:
import os
import psutil
if os.name == 'nt': # If running on Windows...
app = r'C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe'
else:
app = r'apps/foxitreader/FoxitReader.sh'
process = psutil.Popen([app, os.path.join('raw_pdfs', 'Thinkpython.pdf')])
try:
process.wait(timeout=5.0) # Wait specified seconds to see if application crashes.
print('Process crashed with return code %d.' % process.poll())
# If you get here, the process crashed before timing out.
except psutil.TimeoutExpired: # If the timeout expired as normally expected, Then...
print('Process timed-out normally.')
process.kill()
FoxitReader 进程没有在 5 秒后被杀死,PDF 文件继续在 FoxitReader 中保持打开状态。
生成的 Python 解释器输出为:
Openfile()---fileName-: "raw_pdfs/Thinkpython.pdf"
sendMessage
Process timed-out normally.
有时,输出还包含更多内容,似乎来自 Qt(我认为 Linux 版本的 FoxitReader 是用它编写的)。我认为这无关紧要,但是(以防我错了)这是一个示例。
我试着做:
process.terminate()
之前:
process.kill()
(因为看起来如何用 Python 杀死 Linux 进程可能会暗示,但这并没有什么区别。
[这是用于 PDF 阅读器的一些 Python3 '模糊测试'。我随机更改了有效 PDF 文件中的一些字节,然后测试是否有任何“模糊”文件使任何 PDF 阅读器崩溃。它偶尔会导致其中 1 个崩溃。]