9 votes

Comment tuer un processus dont le nom contient des espaces?

Un processus avec le nom=exemple peut être tué par

killall -9 exemple

Comment tuer plusieurs instances de la commande suivante qui contiennent des espaces ?

"valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03"

La commande suivante renvoie valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03: Aucun fichier ou dossier de ce type

killall -9 "valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03"

1 votes

Échappez les espaces avec un \ (barre oblique) ?

1 votes

Killall -9 "valgrind\ --tool=lackey\ ./testcases/kernel/syscalls/waitpid/waitpid03"

0 votes

Tuer tous -9 valgrind\ --tool=lackey\ ./testcases/kernel/syscalls/waitpid/waitpid03...Les deux commandes ne fonctionnent pas.

9voto

killall valgrind tuera tous les processus valgrind quelle que soit la liste des arguments. Si vous voulez tuer uniquement les processus dont la ligne de commande est exactement valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03, vous pouvez utiliser pkill :

pkill -xf 'valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03'

Tout comme killall, pkill est présent sur chaque installation Linux non-embedded (et certaines embedded) et il est plus puissant et souvent plus fiable (mais pour une raison quelconque moins connu). L'utilitaire compagnon pgrep est identique sauf qu'il liste les PID au lieu de tuer.

Un autre utilitaire qui pourrait vous intéresser est fuser : fuser testcases/kernel/syscalls/waitpid/waitpid03 liste les processus qui ont ouvert le fichier spécifié, et fuser -k enverrait un signal à ces processus. Quand vous n'essayez pas d'envoyer un signal, lsof est une alternative plus puissante à fuser (affiche plus d'informations, a plus de filtres).

0 votes

Votre exemple n'a pas fonctionné pour moi mais celui-ci a fonctionné: pkill -f 'valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03'.

1 votes

@JohnMudd Vous avez raison, merci. Je suis assez sûr que je voulais inclure ces citations, la commande que j'ai postée n'a aucun sens. Aussi -fx pour "correspondre exactement à la ligne de commande".

1voto

Dave Sherohman Points 5293

Vous n'avez pas besoin de donner à killall la ligne de commande complète; killall valgrind serait suffisant dans votre cas.

~$ perl -e 'sleep 10000' &
[1] 3586
~$ ps ax | grep perl
 3586 pts/3    S      0:00 perl -e sleep 10000
 3588 pts/3    S+     0:00 grep perl
~$ killall perl
[1]+  Terminated              perl -e 'sleep 10000'
~$

1voto

Linker3000 Points 26898

En plus des autres bonnes solutions, vous pourriez toujours installer htop et ensuite tuer ce que vous voulez en faisant défiler la liste des processus en cours d'exécution et en utilisant la touche F9 (kill). D'accord, ce n'est pas du pur, du stuff de ligne de commande mais ça marche!

0voto

lurker Points 19

killall valgrind ne fonctionne généralement pas car l'exécutable valgrind réel a un autre nom. Ce nom est memcheck-amd64-linux ou similaire, en fonction entre autres de l'outil valgrind que vous utilisez. Ce que ps signale comme nom de processus n'est pas le nom de l'exécutable, mais la première entrée de la ligne de commande. Cela cause de la confusion. J'ai signalé cela à psmisc : https://github.com/acg/psmisc/issues/1

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X