Я хочу убить 3 процесса со всеми разными именами, у которых нет ничего общего. Как мне это сделать? grep не может захватить их все, потому что нет ничего общего, или есть способ заставить его захватить их все?
Если вы действительно хотите использовать grepping, вы можете использовать pkill
, чтобы получить идентификаторы процессов (pids). pkill
ищет некоторый шаблон в именах процессов и убивает найденные процессы.
Синтаксис, который вы можете использовать:
pkill 'process_name1|other_process|something_else'
Вы можете использовать pgrep
(process grep) для проверки того, что вы собираетесь убить с помощью pkill
.
Синтаксис очень похож:
pgrep -l 'proces_name1|other_process|something_else'
Например, если я выполню следующую команду на своей машине, я получу список совпадений с их pid
s:
$ pgrep -l 'clamd|dockerd|snapd'
1952 snapd
1989 clamd
2085 dockerd
2813 dockerd
Warning: Если вы действительно знаете полные имена процессов, используйте ответ LiveWireBT:
kill $(pidof process_name1 other_proces)
Таким образом, ssh-agent
и sshd
не станут жертвами, когда вы запустите pkill ssh
и не обратите внимания на то, что сказал pgrep -l ssh
.
Если предположить, что вы можете выбрать три процесса по имени, то моим решением будет:
kill `ps awx| grep -E '((ProcessNameA)|(ProcessNameB)|(ProcessNameC))' |grep -v grep| sed "s/ .*$//"`
Пример для уничтожения gnome-disks
и gnome-system-monitor
.
kill $(pidof gnome-disks gnome-system-monitor)
Я уверен, что у нас это уже есть здесь в какой-то форме, потому что кто-то здесь, должно быть, сказал мне что-то подобное много лет назад.
Вы можете сделать его красивее, но сложнее:
# Provide a white space separated list of program names to be killed
programs_to_kill="gnome-disks gnome-system-monitor"
kill $(pidof $programs_to_kill)