Script shell pour tuer -9 en fonction du nom

28

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, pkillest trop faible car je dois choisir l' -9option kill.

mreq
la source
2
Vous pouvez aussi l'utiliser -9avec pkill...
Arrêtez de nuire à Monica
6
À mon avis, c'est plus élégant et plus propre à utiliser -KILLque -9. Quel nombre correspond à quel signal dépend de l'implémentation. SIGKILLse trouve être 9sur Linux i386 et Linux amd64, mais pas nécessairement partout. ( Plus d'informations ici. )
Eliah Kagan
5
@EliahKagan: bien que j'aime -KILLaussi l' utiliser (car cela rend le code plus lisible), il convient de noter qu'il SIGKILL = 9est spécifié par POSIX , il -9est donc assez portable de nos jours (et ne dépend pas des noyaux ou des architectures).
Andrea Corbellini

Réponses:

36

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 remplace la pidofcommande-par l'ID de processus et s'exécute kill -9 18845(ou quel que soit l'ID de processus correct).

qbi
la source
Quelle est la différence entre cela et kill -9 $(pgrep middleman)?
Aaron Franke
54

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

killall -9 middleman

Voir man killallpour plus d'informations et des options supplémentaires (il y en a pas mal).

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 middlemanciblera les processus dont le nom correspond mais n'est pas égal middleman, comme middleman2, ainsi.

Gerhard Burger
la source
2
killallpour la victoire!
Andrea Corbellini
4
tuer tous les intermédiaires? oh mon cher ...
Tobias Kienzler
16

Les autres réponses sont entièrement 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 pkillpour plus d'informations et des options supplémentaires.

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

Robie Basak
la source
Étrange, ça ne marche pas ici. Pas plusmiddleman*
mreq
1
Ah. En y regardant de plus près, il semble probable que vous souhaitiez tuer un interprète rubis, plutôt qu'un processus vraiment appelé middleman. C'est là que les différences dans la façon exactement pkill, killall, pidofet les grepprocessus de match commencent vraiment à la matière!
Robie Basak
12
pkill -9 -f middleman

L' -foption le fait correspondre à la ligne de commande complète, plutôt qu'au seul nom du processus.

Notez que cela -9devrait être un signal de dernier recours, pas quelque chose à utiliser régulièrement.

jlliagre
la source
1
Merci! J'aime vraiment la possibilité de faire correspondre lecomplete command line
cwd
la ligne de commande complète est vraiment cool!
okwap
10

Juste pour le plaisir, j'aimerais ajouter une méthode plus old school

kill -9 `ps aux | grep middleman | awk '{print $2}'`
jeu de tirage
la source
1
Je l'ai fait au travail il y a quelques années et l'administrateur m'a lancé un regard qui disait "okay, grand-père". Peut également ajouter un grep -v grep avant le awk pour s'assurer qu'il ne tue pas trop la commande grep.
Iain Holder
@gerhard, merci pour la modification, n'a pas pu trouver les tiques sur mon iPad. grep -v est une bonne idée ...
Slipset
La vraie façon à l'ancienne serait d'écrire ... grep [m]iddleman ...pour éviter de tuer le grepprocessus par accident. De cette façon, le grep ne peut pas se correspondre à cause de citations drôles.
Mikko Rantalainen
1
killall -9 -ir regex_pattern

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

Bohr
la source