Pergunta

Eu estou usando o pacote subprocesso em Python para executar um subprocesso, que mais tarde precisa matar. No entanto, a documentação dos estados de pacotes subprocess que a terminar () função só está disponível a partir de 2,6

Estamos executando Linux com 2,5 e para trás razões de compatibilidade não pode atualizar para 2,6, qual é a alternativa? Eu estou supondo que estas funções são métodos de conveniência para alguma coisa.

Foi útil?

Solução

Você chama os.kill na pid processo.

os.kill(process.pid, signal.SIGKILL)

Você está OK porque você está em em Linux. Os usuários do Windows está fora de sorte.

Outras dicas

Para completar @ resposta de Gareth, no Windows você faz:

import ctypes
PROCESS_TERMINATE = 1
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, theprocess.pid)
ctypes.windll.kernel32.TerminateProcess(handle, -1)
ctypes.windll.kernel32.CloseHandle(handle)

não tão elegante como os.kill(theprocess.pid, 9), mas ela não funciona; -)

Para completar @ respostas de Gareth e @Alex, se você não quer se preocupar com o sistema underlaying, você pode usar psutil .

psutil é um módulo proporcionando uma interface para recuperar informações em processos em execução e sistema utilização (CPU, memória) em um maneira portátil usando Python, a implementação de muitas funcionalidades oferecida por ferramentas de linha de comando como ps, top, matar e gerenciador de tarefas do Windows.

Atualmente ele suporta Linux, OS X, FreeBSD e Windows com Python versões de 2,4 a 3,1 usando um base de código único.

Isso é uma cópia & solução completa pase:

def terminate_process(pid):
    # all this shit is because we are stuck with Python 2.5 and 
    # we cannot use Popen.terminate()
    if sys.platform == 'win32':
        import ctypes
        PROCESS_TERMINATE = 1
        handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, pid)
        ctypes.windll.kernel32.TerminateProcess(handle, -1)
        ctypes.windll.kernel32.CloseHandle(handle)
    else:
        os.kill(pid, signal.SIGKILL)

Aceitar relatórios de bugs como comentários;)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top