使用Python3.5.1,在Windows (64位Windows 7家庭高级版,SP1)上,它的工作方式与我所期望的一样。然而,在Linux上(OpenSUSE 13.2,Harlequin,i586和kde4.14.9),使用Python3.4.1,任何超时进程都不会被终止。
我的流程处理基本上是StackOverflow给Python:运行一个进程,如果它不能在一小时内结束的话,它就会终止的答案(2012年5月10日,Giampaolo Rodolà)。
以下是我所做的(简化)工作:
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 (我认为FoxitReader的Linux是用Qt编写的)。我不认为这是相关的,但是(万一我错了)这里就是一个例子。
我试着做:
process.terminate()在下列会议之前:
process.kill()(就像如何用Python杀死Linux进程所暗示的那样,但这并没有什么不同。
这是一些Python3‘模糊测试’的PDF阅读器。我随机更改有效PDF文件中的一些字节,然后测试是否有任何“模糊”文件使任何PDF读取器崩溃。偶尔也会导致其中的一个坠毁。
发布于 2016-02-01 19:50:43
也许你应该指定杀死代码。根据docs,kill()方法接受参数。尝试使用p.kill(pid=your_pid_num,9),因为它说‘在UNIX上这与os.kill(pid,signal.SIGKILL)相同’https://pythonhosted.org/psutil/#psutil.Process.kill。
发布于 2016-02-01 20:22:30
糟了!我还没意识到。
与Windows、Linux (或至少在OpenSUSE 13.2、Harlequin、KDE4.14.9,使用Python3.4.1)不同,FoxitReader在子进程中运行,因此也需要终止。
我能够按照郑次2014年11月20日对StackOverflow instructed 如何从python中杀死进程和子进程?的回答中的指示做这件事。
https://stackoverflow.com/questions/35138277
复制相似问题