Comment tuer un processus avec une seule commande?

18

Je veux tuer un processus, après avoir trouvé l'identifiant en une seule étape.

J'utilise actuellement ces deux commandes:

pidof <name>
kill <#number_which_is_result_of_command>

Comment puis-je écrire une seule commande pour ce faire?

Cuil Yahoo
la source
Quelle coquille? bash? tcsh? ...?
Levon
2
Vous pouvez rechercher une substitution de commande dans la documentation de votre shell.
deviantkarot
2
Je tue visuellement des choses en utilisant: xkill. Tapez simplement xkill dans le terminal, déplacez le curseur sur l'application incriminée et appuyez sur le bouton
1
@arochester Cela fonctionne, mais est limité aux environnements GUI, la killvariété des commandes fonctionnera à partir de la console (plus pourrait être automatisée dans des scripts, etc.). Toujours bon de faire prendre conscience aux gens de l' xkilloption à coup sûr.
Levon
Si l'une des réponses ci-dessous a résolu votre problème, veuillez envisager de l' accepter en cliquant sur la coche à côté de la réponse. Cela récompensera les deux parties avec des points de représentation et marquera ce problème comme résolu.
Levon

Réponses:

18

Vous pouvez également tuer les processus par leur nom:

Exemple:

pkill vim  # kill all processes containing vim in the process name
fromnaboo
la source
@Levon Êtes-vous sûr? Astuce: cela fonctionnera-t-il si vous changez pkillpour kill?
Mikel
Ça ne marchera pas, Levon. kill -9 tue le processus par son PID et pkill -9 tue le processus par son nom.
fromnaboo
6
Sans -oou -n, pkilltue également tous les processus de correspondance, pas un seul.
Mikel
3
-1 pour avoir suggéré d'utiliser SIGKILL (-9), qui est une mauvaise écologie des processus. Avec SIGKILL, les données du processus ne sont pas vidées, ce qui crée une possible corruption des données.
Arcege
6
La suggestion killallest un TRÈS MAUVAIS CONSEIL. Cela fait des choses très différentes selon l'Unix / Linux sur lequel vous vous trouvez.
MikeyB
13

Pour répondre à votre question spécifique avec votre ensemble de commandes, utilisez:

kill `pidof <name>`

Puisque pidof <name> donné que vous donne le PID du processus que vous essayez de tuer, vous pouvez également l'utiliser avec des commutateurs de ligne de commande tels que -9etc.

Testé avec bashet tcsh.

Levon
la source
9
BTW, kill $(pidof <name>)est plus compatible (POSIX) et peut être utilisé à l'intérieur d'un autre bloc de substitution de commandes .
Rudolf Adamkovic
@RudolfAdamkovic Je suis d'accord, c'est une meilleure option, c'est sûr dans les scripts. Cependant, pour une commande rapide, je trouve que l'utilisation des raccourcis est plus facile .. en plus, cela fonctionne avec les deux shells courants (bash et tcsh) .. Je n'ai pas pu faire fonctionner la $version avec tcsh.
Levon
Essayez-le avec tcshet vous avez raison. Je ne le savais pas. Merci pour l'information!
Rudolf Adamkovic
7

Devrait être un commentaire sur Levon's, mais je n'ai pas de représentant ici pour le faire:

Riffing sur la discussion dans la réponse acceptée à cette question: /server/397762/how-to-make-folders-00-99-with-a-single-command-in-ubuntu

Je dirais qu'il pourrait être préférable (ou au moins utile / plus clair pour les chercheurs ultérieurs) d'exécuter

kill $(pidof <name>)

Référence supplémentaire sur $ () vs ``: http://mywiki.wooledge.org/BashFAQ/082

Ghillie Dhu
la source
+1 pour avoir inclus le lien du bas en particulier. J'ai reçu un commentaire similaire de @RudolfAdamkovic, voir ma réponse. Connaissez-vous une version de ceci qui fonctionne avec tcsh? (Je trouve toujours les backticks plus faciles à taper sur une commande rapide dans le shell :)
Levon
Je n'ai travaillé qu'avec bash (sous Linux) & ksh (sous HP-UX); n'ont pas encore croisé tcsh, désolé.
Ghillie Dhu
1

Vous pouvez également utiliser la killallcommande pour tuer le processus particulier.

killall vim
Karthikeyan.RS
la source