Script Shell pour capturer L'ID du processus et le tuer s'il existe [dupliquer]
cette question a déjà une réponse ici:
j'ai essayé ce code et il ne fonctionne pas
#!/bin/sh
#Find the Process ID for syncapp running instance
PID=`ps -ef | grep syncapp 'awk {print }'`
if [[ -z "$PID" ]] then
Kill -9 PID
fi
il montre une erreur près d'awk.
toute suggestions s'il vous plaît.
11 réponses
en fait la façon la plus facile de faire cela serait de passer des arguments de kill comme ci-dessous:
ps -ef | grep your_process_name | grep -v grep | awk '{print }' | xargs kill
J'espère que ça aidera.
ça me fait du bien.
PID=`ps -eaf | grep syncapp | grep -v grep | awk '{print }'` if [[ "" != "$PID" ]]; then echo "killing $PID" kill -9 $PID fi
j'utilise la commande pkill
pour ceci:
NAME
pgrep, pkill - look up or signal processes based on name and
other attributes
SYNOPSIS
pgrep [options] pattern
pkill [options] pattern
DESCRIPTION
pgrep looks through the currently running processes and lists
the process IDs which match the selection criteria to stdout.
All the criteria have to match. For example,
$ pgrep -u root sshd
will only list the processes called sshd AND owned by root.
On the other hand,
$ pgrep -u root,daemon
will list the processes owned by root OR daemon.
pkill will send the specified signal (by default SIGTERM)
to each process instead of listing them on stdout.
si votre code s'exécute via un interpréteur (java, python,...), puis le nom du processus est le nom de l'interprète. Vous devez utiliser l'argument --complet. Cela correspond au nom de la commande et aux arguments.
vous vouliez probablement écrire
`ps -ef | grep syncapp | awk '{print }'`
mais je souscris à la réponse de @PaulR - killall -9 syncapp
est une bien meilleure alternative.
beaucoup de systèmes *NIX ont aussi l'un ou l'autre ou les deux pkill(1) et killall(1) qui, vous permet de tuer les processus par le nom. En les utilisant, vous pouvez éviter tout le problème d'analyse ps
.
est tombé quelque part..pensé qu'il est simple et utile
vous pouvez utiliser la commande dans crontab directement,
* * * * * ps -lf | grep "user" | perl -ane '($h,$m,$s) = split /:/,$F
+[13]; kill 9, $F[3] if ($h > 1);'
ou, on peut l'écrire comme un script shell ,
#!/bin/sh
# longprockill.sh
ps -lf | grep "user" | perl -ane '($h,$m,$s) = split /:/,$F[13]; kill
+ 9, $F[3] if ($h > 1);'
et appelez-le crontab comme ça,
* * * * * longprockill.sh
#!/bin/sh
#Find the Process ID for syncapp running instance
PID=`ps -ef | grep syncapp 'awk {print }'`
if [[ -z "$PID" ]] then
---> Kill -9 PID
fi
Je ne suis pas sûr que cela aide, mais "tuer" n'est pas orthographié correctement. Il est en majuscule.
essayez de "tuer" à la place.
cela devrait tuer tous les processus correspondant au grep que vous êtes autorisé à tuer.
-9 signifie "Tuer tous les processus que vous pouvez tuer".
kill -9 $(ps -ef | grep [s]yncapp | awk '{print }')
Kill -9 PID
devrait être
kill -9 $PID
vous voyez la différence?
PID=`ps -ef | grep syncapp 'awk {print }'`
if [[ -z "$PID" ]] then
**Kill -9 $PID**
fi
essayez le script suivant:
#!/bin/bash
pgrep 2>&1 > /dev/null
if [ $? -eq 0 ]
then
{
echo " "" PROCESS RUNNING "
ps -ef | grep | grep -v grep | awk '{print }'| xargs kill -9
}
else
{
echo " NO PROCESS RUNNING"
};fi