Como matar um pid baseado no resultado de uma instrução if

0

Eu estou tentando fazer um programa reiniciar se ele tiver apenas um pid associado a ele (ele precisa ter dois pid). se tiver mais de um, tudo bem, eu tentei escrever um script bash para fazer isso, mas eu estou me esforçando para fazê-lo funcionar propriamente, este é o meu código tão fr, alguém pode me ajudar a alcançar meu objetivo?

#! /bib/bash
pgrepRes=($(pgrep deluge))
if ["${#pgrepRes[@]}" -ne "2"];
    then
        kill ${pgrepRes[0]};
fi
deluge

mas estou recebendo este resultado:

Como você pode ver, verifiquei quantos pid estão associados ao Dilúvio.

Obrigado antecipadamente, espero ter me esclarecido o suficiente, caso contrário, pergunte:)

    
por FabioEnne 06.11.2015 / 10:32

1 resposta

0

Existem algumas impressões digitais. Tente algo assim

#!/bin/bash
pgrepN=$( pgrep deluge | wc -l )
if [ "$pgrepN" -lt  "2" ]; then
   echo "less then 2"         # pkill deluge
   echo here restart deluge   # restart only if there were less than 2
fi

Note que no shebang (primeira linha) você não deve colocar um espaço entre #! e o caminho do shell, com o operador de teste [] você precisa colocar espaços dentro dos colchetes: por exemplo, isso é [ OK ] this in [NOT OK] .
Se eu entender corretamente o seu propósito, você só desejará reiniciar se houver menos de duas ocorrências, portanto, dentro da instrução IF.

Atualizar :

#!/bin/bash
Time_to_Sleep="5m"                      # Put here the amount of time
DKiller="/tmp/Kill_Deluge_Script.sh"    # Put here the deluge killer script Name

echo "#!/bin/bash"         >  $DKiller  # Creating script that will kill this one
echo "kill $$; sleep 3s; " >> $DKiller  # Passing the command to kill this one
echo "pkill deluge"        >> $DKiller  # Now you can kill deluge too
echo "echo deluge killed... RIP " >>   $DKiller
chmod u+x $DKiller                      # Make the script executable for you

while true 
do
  pgrepN=$( pgrep deluge | wc -l )
  if [ "$pgrepN" -lt  "2" ]; then
     echo "less then 2"         # pkill deluge
     echo here restart deluge   # restart only if there were less than 2
  fi
sleep $Time_to_Sleep
done
    
por 06.11.2015 / 10:45