Как завершить процесс, в имени которого есть фраза?

Как завершить процесс, в имени которого есть фраза?

Мне нужно убить процесс, который содержит myNameв своем описании. В настоящее время я делаю:

ps -ax |grep myName
I see PID
kill -9 PID

Как сделать то же самое одной командой, не вводя PID?

решение1

Если myNameэто имя процесса/исполняемого файла, который вы хотите завершить, вы можете использовать:

pkill myName

pkillпо умолчанию отправляет SIGTERMсигнал (сигнал 15). Если вам нужен SIGKILLили сигнал 9, используйте:

pkill -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)

решение2

С именем команды используйте:

pkill -9 myscript

Если вы ищете строку в командной строке:

kill -9 $(ps ax | grep myName | fgrep -v grep | awk '{ print $1 }')

Должен вас предупредить: указанная выше команда может отправить SIGKILLсигнал более чем одному процессу.

решение3

Есть две очень удобные команды pgrep, pkillкоторые позволяют ввести поисковый запрос или часть имени команды, и они либо предоставят PID процесса, либо (в случае pkill) завершат этот процесс.

$ pgrep -f firefox                                                             
23699

Выполнение той же команды с pkillфлагом -fи закроет все окна Firefox.

Флаг -fнеобходим специально для поиска по всей командной строке процесса.

решение4

Вы можете выполнить простую операцию for loopпо всем PID, связанным с определенным именем процесса, например так:

$ for i in $( ps ax | awk '/[m]yName/ {print $1}' ); do kill ${i}; done

Это завершит все процессы, содержащие слово: myName.

Связанный контент