如何在50秒后杀死子进程?

问题描述 投票:0回答:4

我想我有几个问题涉及多个问题。所以首先,代码:

import subprocess
username = input ("Enter username: ")
subprocess.call(["python3", "sherlock", username])
Popen.terminate()

我正在使用subprocess使用python3运行sherlock程序。问题是,无论出于何种原因,sherlock程序完成后都不会退出。我不确定这是sherlock的问题,还是我方面的问题。老实说,我不在乎,只想在给它运行50秒后杀死它就可以了,因为这就是运行的时间。

我做了一些阅读,据我所知,我应该使用Popen.terminate()杀死它吗?我知道该命令需要更多运行,我需要告诉它要杀死什么...这就是我遇到的问题。我不确定如何确定正在运行的进程,然后杀死它。我的程序中有95%是在sherlock运行之后发生的,所以距离还很远,所以我需要杀死它,让程序继续前进。

不确定如何从这里继续...

python python-3.x linux subprocess popen
4个回答
1
投票

official documentation开始

Popen。通信(输入=无,超时=无)

与进程交互:将数据发送到stdin。从stdout和stderr读取数据,直到到达文件末尾。等待进程终止。

我认为此功能完全可以满足您的需求。您应该将50秒传递给timeout参数。下面是示例代码段,同样来自文档:

proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=50)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()

0
投票

尝试这样的事情:

import subprocess
username = input ("Enter username: ")
try:
    ret = subprocess.call(["python3", "sherlock", username], timeout=50)
except subprocess.TimeoutExpired:
    # TODO: manage exception
    pass

0
投票

某些进程挂起,等待来自stdin的数据。在这种情况下,请关闭该管道并自行等待终止。一些进程会捕获信号,可能需要稍加微调才能使其退出。

import subprocess
username = input ("Enter username: ")
process = subprocess.Popen(["python3", "sherlock", username],
    stdin=subprocess.PIPE)
process.stdin.close()
try:
    process.wait(50)
except subprocess.TimeoutExpired:
    # timeout expired, be nice
    process.terminate()
    try:
        process.wait(2)
    except subprocess.TimeoutExpired:
        # be mean
        process.kill()
        try:
            process.wait(2)
        except TimeoutExpired:
            # zombies, run!
            print("sherlock could not be killed!")

-1
投票
import subprocess

username = input ("Enter username: ")
a_child_process = subprocess.Popen(args=["python3", "sherlock", username], stdout=subprocess.PIPE)
subprocess.Popen.terminate(a_child_process)
© www.soinside.com 2019 - 2024. All rights reserved.