Parar / matar um processo da linha de comando após um determinado período de tempo

0

Eu tenho um código Python que escuta e detecta sons ambientais. Não é meu projeto, encontrei na web (SoPaRe). Com o comando ./sopare.py -l , ele inicia a gravação de sons, mas em loop infinito. Quando eu quiser parar, eu tenho que pressionar Ctrl + C .

Meu objetivo é parar este programa automaticamente após 10 segundos, mas quando falei com o autor ele disse que o programa não tem um limitador de tempo.

Eu tentei matá-lo via kill PID , mas PID muda toda vez que o programa é executado. Como pode pará-lo após um intervalo de tempo via bash ?

Como alternativa, posso executar esse comando a partir do python com o comando os.system() .

    
por Selim Turkoglu 24.11.2018 / 16:43

3 respostas

3

A solução mais simples seria usar timeout da coleção de GNU coreutils (provavelmente instalada por padrão na maioria dos sistemas Linux):

timeout 10 ./sopare.py -l

Consulte o manual para este utilitário para mais opções ( man timeout ). Em sistemas não-GNU, este utilitário pode ser instalado como gtimeout se o GNU Coreutils estiver instalado.

Outra alternativa, se o GNU Coreutils não estiver disponível, é iniciar o processo em segundo plano e esperar 10 segundos antes de enviar um sinal de terminação:

./sopare.py -l &
sleep 10
kill "$!"

$! será o ID do processo do processo em segundo plano iniciado mais recentemente, neste caso do seu script Python.

    
por 24.11.2018 / 18:52
0

Experimente este script bash:

#! /bin/bash
./soapre.py -l
PID='ps u | awk ' $11 == "./soapre.py" { print $2 }''
sleep 10
kill $PID

Eu estou supondo que o comando sleep 10 pause somente o script bash enquanto o soapre.py ainda está sendo executado em segundo plano. Talvez você também a coluna COMMAND of ps u tenha um valor diferente de "./soapre/py" . faça suas próprias correções simples, mas isso deve funcionar.

    
por 24.11.2018 / 18:40
-1

Tente usar

pgrep sopare.py | xargs kill
    
por 24.11.2018 / 17:41