Этот вопрос уже задан ответ здесь:
Мне нужно убить процесс, который содержит myName
в своем описании. В настоящее время я делаю:
ps -ax |grep myName
I see PID
kill -9 PID
Как я могу сделать то же самое с одной командой, не вводя PID?
Если myName
название процесса/исполняемого файла, который Вы хотите уничтожить, можно использовать:
pkill myName
pkill
по умолчанию отправляет SIGTERM
сигнал (сигнал 15). Если Вы хотите SIGKILL
или сигнал 9, используйте:
pkilll -9 myName
Если myName
не имя процесса или например, аргумент другой (долгой) команде, pkill
(или pgrep
) не мог бы работать как ожидалось. Таким образом, необходимо использовать -f
опция. От man kill
:
-f, --full
The pattern is normally only matched against the process name.
When -f is set, the full command line is used.
NOTES
The process name used for matching is limited to the 15 characters present
in the output of /proc/pid/stat. Use the -f option to match against the
complete command line, /proc/pid/cmdline.
Так:
pkill -f myName
или
kill -9 $(pgrep -f myName)
С использованием имени команды:
pkill -9 myscript
, Если Вы ищете строку в командной строке:
kill -9 $(ps ax | grep myName | fgrep -v grep | awk '{ print $1 }')
я должен предупредить Вас: вышеупомянутая команда может отправить SIGKILL
сигнал больше чем к одному процессу.
Вы могли сделать, простое for loop
по всему PID связалось с определенным именем процесса, как это:
$ for i in $( ps ax | awk '/[m]yName/ {print $1}' ); do kill ${i}; done
Это уничтожит все процессы, которые содержат слово: myName
.
Существует две очень аккуратных команды pgrep
и pkill
, которые позволяют вводить критерий поиска или часть названия команды, и это или обеспечит, PID процесса или (в случае pkill
) уничтожают тот процесс.
$ pgrep -f firefox
23699
Выполнение той же команды с pkill
и -f
флаг закроет все окна Firefox.
Эти -f
флаг необходим конкретно для поиска полной командной строки процесса.
С pkill
и отправка сигнал 9 , можно уничтожить процесс по имени:
sudo pkill -9 myName