首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:超时的psutil进程(按指示)在Windows中终止,但在Linux中不起作用

Python:超时的psutil进程(按指示)在Windows中终止,但在Linux中不起作用
EN

Stack Overflow用户
提问于 2016-02-01 19:05:24
回答 2查看 931关注 0票数 1

使用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à)。

以下是我所做的(简化)工作:

代码语言:javascript
复制
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解释器输出是:

代码语言:javascript
复制
Openfile()---fileName-: "raw_pdfs/Thinkpython.pdf"
sendMessage
Process timed-out normally.

有时,输出还包含更多内容,似乎来自Qt (我认为FoxitReader的Linux是用Qt编写的)。我不认为这是相关的,但是(万一我错了)这里就是一个例子。

我试着做:

代码语言:javascript
复制
process.terminate()

在下列会议之前:

代码语言:javascript
复制
process.kill()

(就像如何用Python杀死Linux进程所暗示的那样,但这并没有什么不同。

这是一些Python3‘模糊测试’的PDF阅读器。我随机更改有效PDF文件中的一些字节,然后测试是否有任何“模糊”文件使任何PDF读取器崩溃。偶尔也会导致其中的一个坠毁。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 0
EN

Stack Overflow用户

发布于 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中杀死进程和子进程?的回答中的指示做这件事。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35138277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档