2012-07-09 13:15:55 +0000 2012-07-09 13:15:55 +0000
19
19

Como parar manualmente um guião Python que corre continuamente no linux

Tenho um guião Python que está a correr e a despejar continuamente erros num ficheiro de registo.

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

Estou actualmente ligado ao Linux através do PuTTy e estou a fazer toda a codificação lá. Então, existe algum comando para parar o script python no linux?

Respostas (6)

35
35
35
2012-07-09 13:19:39 +0000

Terá de encontrar o id do processo (pid). um comando para o fazer seria

$> ps -ef

para limitar os resultados aos processos python pode grep 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. depois use o comando kill como tal :

$> kill -9 2430 (i.e. the pid returned)
7
7
7
2016-05-25 10:23:16 +0000

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

pkill -9 -f script.py
7
7
7
2012-07-09 13:17:43 +0000

Encontre o ID do processo (PID) do guião e emita um kill -9 PID para matar o processo, a menos que esteja a correr como o seu processo forround no terminal, caso em que pode Contrl-C para o matar.

Encontre o PID com este comando:

ps -elf | grep python

Lista todos os processos python, escolha o correcto e anote o seu PID. Depois

kill -9 <whatever_the_PID_is>

irá matar o processo. Poderá receber uma mensagem sobre ter terminado um processo nesta fase.

Em alternativa, pode usar o comando top para encontrar o processo python. Basta introduzir k (para matar) e o programa top irá pedir-lhe o PID do processo para matar. Por vezes é difícil ver todos os processos em que está interessado com top uma vez que podem rolar para fora do ecrã, penso que a abordagem ps é mais fácil/melhor.

4
4
4
2012-07-09 13:17:29 +0000

Se o programa for o processo actual na sua concha, digitando Ctrl-C parará o programa Python.

1
1
1
2014-07-15 17:16:12 +0000

Num mundo perfeito, ler-se-ia a documentação do guião e ver-se-ia que sinal(s) deveria(m) ser utilizado(s) para lhe dizer para terminar. Na vida real, provavelmente quer enviar-lhe o sinal TERM, primeiro, talvez usando um sinal KILL se este ignorar o TERM. Assim, o que se faz é encontrar o ID do Processo, usando o comando ps (como alguém já descreveu). Depois, pode correr kill -TERM <pid>. Alguns programas irão limpar coisas, como ficheiros que possam ter abertos, quando recebem um sinal como esse, por isso é mais agradável começar com algo do género. Se isso falhar, então não há muito mais a fazer, excepto o grande martelo: kill -KILL <pid>. (pode usar os valores numéricos, por exemplo -KILL = -9, e provavelmente nunca mudarão, mas num sentido teórico pode ser mais seguro usar os nomes)

0
0
0
2015-03-25 11:03:19 +0000

Se souber o nome do guião, poderá reduzir todo o trabalho a um único comando:

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

Se quiser ter a certeza de que se trata de um guião python:

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

Se quisesse matar todos os guiões python:

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

Suponho que tenha a ideia ;)

Lembrete: precisa de citar “” o nome do guião como nos exemplos.