web-dev-qa-db-fra.com

Comment tuer seulement si le processus est en cours d'exécution?

Actuellement, j'utilise une ligne comme celle-ci dans mon fichier de script sh:

kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'` 

Mais je me demande comment l'appeler uniquement si le processus (myServer ici) est en cours d'exécution?

11
myWallJSON

J'utilise habituellement juste pgrep et pkill

if pgrep myServer; then pkill myServer; fi
16
boutch55555

Vous pouvez tuer les processus par leur nom en utilisant pkill ou killall, en consultant leurs pages de manuel.

9
enzotib

Une approche légèrement différente ressemblerait à ceci:

killall PROCESS || echo "Process was not running."

Cela évitera le 1 Error-Code renvoyé par la commande killall, si le processus n’existait pas. La partie echo n'entrera en action que si killall renvoie 1, alors que lui-même retournera 0 (succès).

5
codepleb

Petit script que j'ai créé avec R & D. J'espère que tu l'aimeras

#!/bin/bash

echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name  got killed"
else
echo " $proc_name is not running/stopped "
fi

enregistrez-le sous un nom tel que script.sh puis

chmod +x script.sh
./script.sh

Puis donnez le nom de votre processus.

Note: J'ai essayé plusieurs fois avec ceci et c'est bien.

0
rɑːdʒɑ

essayez d'utiliser:

Sudo kill `pidof process_name`

où nom_processus est le nom du processus à supprimer. Ce qui est génial, c’est que pidof listera les pid de tous les processus correspondant au nom donné. Puisque kill accepte plusieurs pid, il les tuera tous en un seul caprice.

Faites-moi savoir si cela aide.

0
amandion

Vérifiez si le processus existe avec pidof. Si c'est le cas, tuez-le:

(! pidof process_name) || Sudo kill -9 $(pidof process_name)

Le code de sortie est toujours 0 après l'exécution de la commande ci-dessus.

0
Juuso Ohtonen