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.


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).


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.


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.


É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.


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}'`

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.