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

19

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

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

Atualmente, estou 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?

Gunnar
fonte

Respostas:

35

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

$> ps -ef

para limitar resultados a processos python, você pode saudar 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)
olly_uk
fonte
Era exatamente o que eu estava procurando. Obrigado
7

Localize a identificação do processo (PID) do script e emita um kill -9 PID para interromper o processo, a menos que esteja sendo executado como seu processo forground no terminal. Nesse caso, você pode usar o Contrl-C para matá-lo.

Encontre o PID com este comando:

ps -elf | grep python

Ele lista todos os processos python, escolhe o correto e anota seu PID. Então

kill -9 <whatever_the_PID_is>

vai matar o processo. Você pode receber uma mensagem sobre o término de um processo nesse estágio.

Como alternativa, você pode usar o topcomando para encontrar o processo python. Basta digitar k(para matar) e o topprograma solicitará o PID do processo para matar. Às vezes, é difícil ver todos os processos nos quais você está interessado, toppois eles podem rolar para fora da tela, acho que a psabordagem é mais fácil / melhor.

Levon
fonte
4
Bem, antes de usar -9, eu o mataria "suavemente" primeiro. Somente se não reagir, eu usaria -9.
9113 glglgl
Não está familiarizado com a palavra "morte suave" ..
Levon
7

Tente esta linha simples, terminará tudo script.py:

pkill -9 -f script.py
trex
fonte
1
Isso é muito melhor do que procurar manualmente o PID se o nome do script for exclusivo.
FlippingBinary
4

Se o programa for o processo atual no seu shell, digitar Ctrl-C interromperá o programa Python.

Ned Batchelder
fonte
Ótima solução, necessária para testes.
Kuzon
1

Em um mundo perfeito, você deve ler a documentação do script e ver quais sinais devem ser usados ​​para dizer ao final. Na vida real, você provavelmente deseja 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). Então, você pode executar kill -TERM <pid>. Alguns programas limpam coisas, como arquivos que eles podem abrir, quando recebem um sinal como esse, por isso é melhor começar com algo assim. Se isso falhar, então não há muito a fazer, exceto o grande martelo: kill -KILL <pid>. (você pode usar os valores numéricos, por exemplo, -KILL = -9, e eles provavelmente nunca mudarão, mas, no sentido teórico, pode ser mais seguro usar os nomes)

jrl
fonte
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ê queria matar todos os scripts python:

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

Suponho que você entendeu a idéia;)

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

Jesus
fonte