web-dev-qa-db-fra.com

Script shell à -9 tuer en fonction du nom

Existe-t-il un moyen (peut-être un script) d'automatiser ce processus:

petr@sova:~$ ps -ef | grep middleman
petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/Ruby-1.9.3-p362/bin/middleman                                                                  
petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
petr@sova:~$ kill -9 18445

Malheureusement, pkill est trop faible car je dois utiliser l'option -9 sur kill.

28
mreq

Vous pouvez utiliser votre shell pour effectuer cette tâche pour vous:

kill -9 $(pidof middleman)

Le shell exécute d'abord la commande pidof middleman. La sortie de pidof (8) est l'identifiant du processus. Ainsi, le shell substitue la commande pidof- avec l'ID de processus et exécute kill -9 18845 (ou quel que soit l'identifiant de processus correct).

35
qbi

Il existe une solution encore plus simple que celle de qbi: killall vous permet de tuer les processus par leur nom et de spécifier des signaux.

killall -9 middleman

Voir man killall pour plus d'informations et d'options supplémentaires (il en existe plusieurs).

Comme son nom l'indique, cela envoie le signal à tous les processus nommés middleman. Mais ce n'est pas différent des autres moyens (comme pkill). De plus, pkill -9 middleman ciblera également les processus dont le nom correspond mais n'est pas égal à middleman, tel que middleman2.

54
Gerhard Burger

Les autres réponses sont tout à fait correctes, mais je pourrais aussi bien ajouter une troisième option afin que toutes soient documentées ici. Vous pouvez aussi utiliser:

pkill -9 middleman

Voir man pkill pour plus d'informations et des options supplémentaires.

Peu importe laquelle de ces méthodes vous utilisez. Ils vont tous travailler. Mais connaître les options si vous le souhaitez si vous souhaitez modifier le comportement d’une manière ou d’une autre, car les pages de manuel correspondantes indiquent les autres options correspondantes disponibles.

16
Robie Basak
pkill -9 -f middleman

L'option -f lui permet de correspondre à la ligne de commande complète, plutôt qu'au seul nom du processus.

Notez que -9 devrait être un signal de dernier recours, pas quelque chose à utiliser systématiquement.

12
jlliagre

Juste pour le plaisir, j'aimerais ajouter une manière plus manuelle, à l'ancienne

kill -9 `ps aux | grep middleman | awk '{print $2}'`
10
slipset
killall -9 -ir regex_pattern

qui est interactif (sûr) et correspond au nom de commande partiel.

1
Bohr