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.

50
demandé sur Paul R 2012-12-17 11:40:02

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.

118
répondu Anthony Mutisya 2015-10-01 17:32:44

ç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
12
répondu N Dierauf 2014-12-04 20:06:45

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.

7
répondu guettli 2016-05-26 10:14:24

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.

4
répondu Amadan 2012-12-17 07:46:01

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 .

1
répondu jbr 2014-07-11 13:27:28

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
0
répondu user3743785 2014-07-06 09:22:31
#!/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.

0
répondu AnonManon 2014-08-18 20:00:14

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 }')
0
répondu EvR2f 2016-06-08 12:21:44
Kill -9 PID

devrait être

kill -9 $PID

vous voyez la différence?

0
répondu Not_a_User 2016-07-08 09:16:03
PID=`ps -ef | grep syncapp 'awk {print }'`

if [[ -z "$PID" ]] then
**Kill -9 $PID**
fi
-1
répondu Sam 2013-11-19 10:44:45

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
-1
répondu chiranjeevi 2015-03-13 13:56:04