7

Процесс с именем = пример может быть убит

пример killall -9

Как убить несколько экземпляров следующей команды, которые содержат пробелы?

"valgrind --tool = лакей ./testcases/kernel/syscalls/waitpid/waitpid03"

Следующая команда возвращает valgrind --tool = lakey ./testcases/kernel/syscalls/waitpid/waitpid03: Нет такого файла или каталога

killall -9 "valgrind --tool = лакей ./testcases/kernel/syscalls/waitpid/waitpid03"

4 ответа4

7

killall valgrind убьет все процессы valgrind независимо от аргументов. Если вы хотите уничтожить только процессы, командная строка которых точно равна valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03 , вы можете использовать pkill:

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

Как и killall , pkill используется во всех не встроенных (и некоторых встроенных) установках Linux и является более мощным и часто более надежным (но по некоторым причинам менее известным). Сопутствующая утилита pgrep идентична, за исключением того, что она перечисляет PID вместо убийства.

Другая утилита, которая может вас заинтересовать, - это fuser: fuser testcases/kernel/syscalls/waitpid/waitpid03 перечисляет процессы, для которых указанный файл открыт, и fuser -k посылает сигнал этим процессам. Когда вы не пытаетесь отправить сигнал, lsof является более мощной альтернативой fuser (показывает больше материала, имеет больше фильтров).

1

Вам не нужно давать killall полную командную строку; killall valgrind будет достаточно в вашем случае.

~$ 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'
~$ 
1

Как и другие хорошие решения, вы всегда можете установить htop и затем убить то, что вы хотите, прокручивая список запущенных процессов и используя клавишу F9 (kill). Хорошо, это не хладнокровный материал командной строки, но он работает!

0

killall valgrind обычно не работает, так как сам исполняемый файл valgrind имеет другое имя. Это имя memcheck-amd64-linux или подобное, в зависимости от того, какой инструмент valgrind вы используете. То, что ps сообщает как имя процесса, это не имя исполняемого файла, а первая запись в командной строке. Это вызывает путаницу. Я сообщил об этом в psmisc: https://github.com/acg/psmisc/issues/1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .