Killing as instâncias anteriores de um script antes de executar o mesmo script Unix

2

Eu quero matar o processo em segundo plano pertencente a um script de shell que eu vou executar novamente.

Isso significa que, antes de executar o script de shell, eu quero excluir o processo em segundo plano em execução para o script same .

    
por Abin 01.07.2015 / 12:53

4 respostas

4

Verifique a existência de um PID do mesmo script.

Supondo que seu script seja chamado my_script.sh , adicione isso no início do script:

#!/bin/bash
for pid in $(pidof -x my_script.sh); do
    if [ $pid != $$ ]; then
        kill -9 $pid
    fi 
done
    
por 01.07.2015 / 13:10
2

Eu fiz isso há muito tempo em um dos meus scripts de shell. Aqui está como eu fiz:

ps aux | \
grep -P ${BASH_SOURCE[0]} | \
grep -v $$ | \
grep -P "bash" | \
grep -oP "^[[:alnum:]]+\s+\d+\s" | \
grep -oP "\d+" | \
xargs kill -9

A beleza desse método é que ele NÃO matará o script em execução atual, apenas as instâncias anteriores dele.

Um exemplo de script para demonstrar o método acima é este:

#!/bin/bash

ps aux | grep -P ${BASH_SOURCE[0]} | grep -v $$ | grep -P "bash" | grep -oP "^[[:alnum:]]+\s+\d+\s" | grep -oP "\d+"

sleep 100

Agora, execute uma instância desse script no seu terminal. Em seguida, execute outra instância em um terminal diferente. Você verá que a instância anterior será imediatamente eliminada enquanto a segunda é executada corretamente.

    
por 01.07.2015 / 13:05
0

Tente isto:

#!/bin/sh
if [ -f /var/run/sh.pid ]; then
    echo "Process already running."
     kill -9 'cat /var/run/sh.pid'
     rm -f /var/run/sh.pid
fi
echo 'pidof $$' > /var/run/sh.pid

 # From here, your normal shell script can resume
    
por 01.07.2015 / 13:04
0

este é mais curto e funcionou para mim no meu app ruby

ps -ef| grep search_pattern | awk '{print $2}' | xargs kill -9

substitua search_pattern pelo nome do seu script

    
por 11.06.2016 / 08:25