Como matar um processo com nome tendo espaços?

6

Um processo com nome = exemplo pode ser eliminado por

killall -9 exemplo

Como matar várias instâncias do seguinte comando que contêm espaços?

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

O comando a seguir retorna valgrind --tool = lacaio./testcases/kernel/syscalls/waitpid/waitpid03: Nenhum arquivo ou diretório desse tipo

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

    
por Undefined 10.12.2010 / 11:41

4 respostas

7

killall valgrind eliminará todos os processos valgrind , independentemente dos argumentos. Se você quiser matar somente processos cuja linha de comando é exatamente valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03 , você pode usar pkill :

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

Como killall , pkill está em todas as instalações Linux não incorporadas (e algumas incorporadas), e é mais poderoso e muitas vezes mais confiável (mas por algum motivo menos conhecido). O utilitário associado pgrep é idêntico, exceto que lista os PIDs em vez de matar.

Outro utilitário em que você pode estar interessado é fuser : fuser testcases/kernel/syscalls/waitpid/waitpid03 lista os processos que têm o arquivo especificado aberto, e fuser -k enviaria um sinal para esses processos. Quando você não está tentando enviar um sinal, lsof é uma alternativa mais poderosa para fuser (mostra mais coisas, tem mais filtros).

    
por 10.12.2010 / 23:02
1

Você não precisa dar killall a linha de comando completa; killall valgrind seria suficiente no seu caso.

~$ 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'
~$ 
    
por 10.12.2010 / 11:54
1

Além das outras boas soluções, você sempre pode instalar o htop e depois matar o que deseja, percorrendo a lista de processos em execução e usando a tecla F9 (kill). Ok, não é difícil, mas isso funciona!

    
por 10.12.2010 / 14:49
0

killall valgrind geralmente não funciona, pois o executável valgrind real tem outro nome. Este nome é memcheck-amd64-linux ou similar, dependendo entre outras coisas em qual ferramenta valgrind você está usando. O que o ps informa como o nome do processo não é o nome do executável, mas a primeira entrada na linha de comando. Isso causa confusão. Eu relatei isso para o psmisc: link

    
por 13.08.2015 / 11:27