Como parar manualmente um script Python que é executado continuamente no linux

11

Eu tenho um script Python que está sendo executado e continuamente despejando erros em um arquivo de log.

Eu quero editar o script e executá-lo novamente, mas não sei como parar o script.

Eu estou atualmente logado no Linux através do PuTTy e estou fazendo toda a codificação lá. Então, existe um comando para parar o script python no linux?

    
por Gunnar 09.07.2012 / 15:15

6 respostas

28

Você terá que encontrar o ID do processo (pid). um comando para fazer isso seria

$> ps -ef

para limitar os resultados aos processos python, você pode usar o resultado

$> ps -ef | grep python

que dará resultados como:

user      2430     1  0 Jul03 ?        00:00:01 /usr/bin/python -tt /usr/sbin/yum-updatesd

a segunda coluna é o pid. então use o comando kill como tal:

$> kill -9 2430 (i.e. the pid returned)
    
por 09.07.2012 / 15:19
7

Encontre o ID do processo (PID) do script e emita um kill -9 PID para matar o processo, a menos que ele esteja sendo executado como seu processo de forground no terminal. Nesse caso, você pode usar o Contrl-C para eliminá-lo.

Encontre o PID com este comando:

ps -elf | grep python

Lista todos os processos python, escolha o caminho certo e anote seu PID. Então

kill -9 <whatever_the_PID_is>

irá matar o processo. Você pode receber uma mensagem sobre ter encerrado um processo neste estágio.

Como alternativa, você pode usar o comando top para localizar o processo python. Simplesmente digite k (para matar) e o programa top solicitará que o PID do processo seja eliminado. Às vezes é difícil ver todos os processos em que você está interessado com top , pois eles podem rolar para fora da tela, acho que a abordagem ps é mais fácil / melhor.

    
por 09.07.2012 / 15:17
3

Se o programa é o processo atual no seu shell, digitar Ctrl-C irá parar o programa Python.

    
por 09.07.2012 / 15:17
3

Tente esta linha simples. Ela terminará todos os script.py :

pkill -9 -f script.py
    
por 25.05.2016 / 12:23
1

Em um mundo perfeito, você leu a documentação do script e viu quais sinais devem ser usados para dizer ao final. Na vida real, você provavelmente quer enviar o sinal TERM, primeiro, talvez usando um sinal KILL se ignorar o TERM. Então, o que você faz é encontrar o ID do processo, usando o comando ps (como alguém já descrito). Em seguida, você pode executar kill -TERM <pid> . Alguns programas limpam coisas, como arquivos que podem ter abertos, quando recebem um sinal como esse, então é melhor começar com algo parecido. Se isso falhar, não há muito o que fazer, exceto o grande martelo: kill -KILL <pid> . (você pode usar os valores numéricos, por exemplo, -KILL = -9, e eles provavelmente nunca vão mudar, mas em um sentido teórico, pode ser mais seguro usar os nomes)

    
por 15.07.2014 / 19:16
0

Se você souber o nome do script, poderá reduzir todo o trabalho para um único comando:

ps -ef | grep "script_name" | awk '{print $2}' | xargs sudo kill

Se você quiser ter certeza de que é um script python:

ps -ef | grep "python script_name" | awk '{print $2}' | xargs sudo kill

Se você quisesse matar todos os scripts python:

ps -ef | grep "python" | awk '{print $2}' | xargs sudo kill

Eu suponho que você entendeu a ideia;)

Lembrete: você precisa citar "" o nome do script como está nos exemplos.

    
por 25.03.2015 / 12:03