Mate o processo do script shell pelo nome

0

Eu tenho um script em background assim:

nohup /tmp/a.sh &

Se o script estiver sendo executado por mais de cinco minutos, eu quero kill .

-bash-3.2$ nohup /tmp/a.sh &
[1] 2518
-bash-3.2$ nohup: appending output to 'nohup.out'

-bash-3.2$ ps -ef | grep /tmp/a.sh
ordev  2518 17827  0 15:24 pts/3    00:00:00 /bin/sh /tmp/a.sh
ordev  2525 17827  0 15:24 pts/3    00:00:00 grep /tmp/a.sh
-bash-3.2$
-bash-3.2$ killall /tmp/a.sh  # killall not working like this
/tmp/a.sh: no process killed

Se eu usar killall como abaixo, tente matar todas as sessões executando /bin/sh :

-bash-3.2$ killall sh /tmp/a.sh
sh(17822): Operation not permitted  # this pid associated with another process under root user. 
/tmp/a.sh: no process killed
[1]+  Terminated              nohup /tmp/a.sh .

Diferente de pkill -f , existem alternativas que matem apenas o nome do script requerido?

    
por Vijay 31.05.2016 / 22:32

2 respostas

1

Salve o pid do processo iniciado e salve-o no arquivo. Antes de gerar uma nova instância, verifique se o antigo foi concluído. Caso contrário, mate-o.

echo "Starting a new A instance"
nohup /tmp/a.sh &
echo "Writing A pid to file"
echo $! > /tmp/a_pid

Em seguida, você pode verificar o tempo e matar o script como:

if [ -f /tmp/a_pid ]; then
    echo "Trying to stop previous instance of proces A"
    kill $(cat /tmp/a_pid) || true
    echo "Removing A pid file"
    rm /tmp/a_pid
fi
    
por 01.06.2016 / 09:44
0

Não é necessário matar pelo nome. Eu recomendo que você salve o PID do script toda vez que executá-lo, então chame esse PID de um arquivo quando quiser matá-lo. Como:

nohup /tmp/a.sh &
echo $! > a_pid

Então, para matá-lo, faça:

ps -9 ' a_pid'

Note $! dá o último comando executado que será nohup nohup /tmp/a.sh &

    
por 01.06.2016 / 03:36

Tags