Como parar um programa em execução como daemon

4

Eu lancei iperf no modo daemon com iperf -s -D e agora quero parar o serviço. Eu tentei usar sudo kill pid , mas não funciona nem reclama. O daemon ainda está em execução quando eu verifico em ps -ef | grep iperf .

Como ele não é iniciado pelo Linux, não consigo encontrá-lo através de service como outros daemons.

Como eu poderia pará-lo?

    
por steveyang 17.02.2012 / 09:31

6 respostas

7

Não use kill -9 ! Este comando destina-se a ser usado apenas em alguns casos extremos específicos.

De acordo com a página man (na minha caixa Solaris):

DESCRIPTION
 The kill utility sends a signal to the process or  processes
 specified by each pid operand.

 For each pid operand, the kill utility will perform  actions
 equivalent to the kill(2) function called with the following
 arguments:

 1.  The value of the pid operand will be  used  as  the  pid
     argument.

 2.  The sig argument  is  the  value  specified  by  the  -s
     option,  the  -signal_name option, or the -signal_number
     option, or, if none of these options  is  specified,  by
     SIGTERM.

 The signaled process must belong to the current user  unless
 the user is the super-user.

Quando você não especificar nenhum sinal, kill enviará SIGTERM ( kill -15 ) para o seu processo. Existem sinais mais agressivos que você pode enviar que são menos violentos do que SIGKILL ( kill -9 ).

Por que evitar matar -9?

SIGKILL é um sinal muito violento. Não pode ser pego pelo processo, o que significa que o processo que o recebe tem que largar tudo instantaneamente e sair. Não leva tempo para liberar recursos bloqueados (como soquetes ou arquivos de rede), nem para informar outros processos de saída. Muitas vezes, ele deixará sua máquina em um estado instável. Fazendo uma analogia, você poderia dizer que matar um processo com SIGKILL é tão ruim quanto desligar a máquina com o botão Power (em oposição ao comando shutdown ).

Por uma questão de fatos, o SIGKILL deve ser evitado tanto quanto possível . Em vez disso, como mencionado no artigo, sugerimos que você tente kill -2 e, se isso não funcionar, kill -1 .

Eu vi pessoas se apressarem em enviar SIGKILL o tempo todo (mesmo em roteiros diários de limpeza!). Eu brigo com meus companheiros de equipe diariamente sobre isso. Por favor, não use kill -9 cegamente.

    
por 17.02.2012 / 11:20
2

Como parece que esse processo iperf não está respondendo ao seu sinal de "término" (o sinal padrão é enviado pelo comando kill <pid> ). Isso geralmente significa que o processo está travado de alguma forma ou preso no acesso de entrada / saída.

Você só precisa ser mais violento e enviar um sinal de "KILL":

kill -9 <pid>

Ou

kill -KILL <pid>

Isso encerrará o processo sem esperar que ele seja concluído corretamente.

    
por 17.02.2012 / 11:02
1

Embora geralmente não seja recomendado, você sempre pode recorrer a kill -9 <pid> para realmente matar um processo. Entenda, no entanto, que você está desligando o processo com força, o que significa que ele não sairá graciosamente.

    
por 17.02.2012 / 11:00
1

use kill -9 <pid of iperf> para matar o processo. Com um número de sinal de 9 (KILL), o kill não pode ser capturado pelo processo; use isso para matar um processo que uma simples kill não encerra.

    
por 17.02.2012 / 11:00
0

Você deve usar o comando kill com a opção -9.

$ kill -9 pid

Eu envia o sinal SIGKILL para matar o processo que é o sinal mais strong de todos.

    
por 17.02.2012 / 11:18
-2

você pode usar o comando svc que é usado para parar os serviços de daemon

    
por 20.04.2018 / 15:12