Como matar um processo dando-lhe um número de segundos antes de fazer a matança forçada?

5

Eu tenho o PID do processo para ser morto, mas eu quero dar a chance de morrer em paz, sem fazer um -9.

Comportamento esperado: verifique se o PID ainda está sendo executado por até dez segundos e faça um kill -9 nele.

Bônus extra se você puder fazer isso em uma única linha.

    
por sorin 31.10.2012 / 14:09

2 respostas

2

Uma maneira melhor de fazer isso (que evita matar o mesmo PID para um processo diferente) é:

 function kill_gracefully() {  
    pid=$1; [[ -z $pid ]] && return;  # check arg
    kill $pid; # kill once

    i=0;    
    while kill -0 $pid; do  # while pid is alive
       sleep 0.1;      
       ((i+=1));  # count ++
       if [[ $i -gt 10 ]];then    # wait for 10 secs at most
           kill -9 $pid;          # kill if timeout
           break;  
       fi;
    done;     
}

O método acima pode falhar em um sistema carregado pesado (que se bifurca freqüentemente)

    
por 31.10.2012 / 15:31
0
kill -- "$pid"; sleep 10; kill -s KILL -- "$pid"

Se estiver em um sistema baseado no debian:

echo "$pid" | start-stop-daemon --pidfile /dev/stdin --stop --oknodo --name "$process_name" --user "$user" --retry 10

Que permite especificar critérios de correspondência (como nome de usuário e nome de comando) para evitar a morte do processo incorreto caso o pid tenha sido reutilizado.

    
por 31.10.2012 / 14:27

Tags