Найти и убить процесс в одной строке, используя bash и regex - PullRequest
564 голосов
/ 18 августа 2010

Мне часто нужно убивать процесс во время программирования.

Способ, которым я делаю это сейчас:

[~]$ ps aux | grep 'python csp_build.py'
user    5124  1.0  0.3 214588 13852 pts/4    Sl+  11:19   0:00 python csp_build.py
user    5373  0.0  0.0   8096   960 pts/6    S+   11:20   0:00 grep python csp_build.py
[~]$ kill 5124

Как мне автоматически извлечь идентификатор процесса и уничтожить его в том желиния?

Как это:

[~]$ ps aux | grep 'python csp_build.py' | kill <regex that returns the pid>

Ответы [ 23 ]

0 голосов
/ 08 ноября 2017

Будет полезна следующая команда:

kill $(ps -elf | grep <process_regex>| awk {'print $4'})

например, ps -elf | grep top

    0 T ubuntu    6558  6535  0  80   0 -  4001 signal 11:32 pts/1    00:00:00 top
    0 S ubuntu    6562  6535  0  80   0 -  2939 pipe_w 11:33 pts/1    00:00:00 grep --color=auto top

kill -$(ps -elf | grep top| awk {'print $4'})

    -bash: kill: (6572) - No such process
    [1]+  Killed                  top

Если процесс все еще застрял, используйте расширение "-9" для hardkill следующим образом:

kill -9 $(ps -elf | grep top| awk {'print $4'})

Надеюсь, это поможет ...!

0 голосов
/ 27 января 2018

Найти и уничтожить все процессы в одной строке в bash.

kill -9 $(ps -ef | grep '<exe_name>' | grep -v 'grep' | awk {'print $2'})
  • ps -ef | grep '<exe_name>' - Предоставляет список деталей запущенного процесса (uname, pid и т. Д.), Который соответствует шаблону. В список вывода также входит эта команда grep, которая ищет ее. Теперь для убийства нам нужно игнорировать этот grep командный процесс.
  • ps -ef | grep '<exec_name>' | grep -v 'grep' - Добавление еще одного grep с помощью -v 'grep' удаляет текущий процесс grep.
  • Затем, используя awk, получите только идентификатор процесса.
  • Затем сохраните эту команду внутри $(...) и передайте ее команде kill, чтобы убить весь процесс.
0 голосов
/ 08 февраля 2015

Я использую gkill processname, где gkill - следующий скрипт:

cnt=`ps aux|grep $1| grep -v "grep" -c`
if [ "$cnt" -gt 0 ]
then
    echo "Found $cnt processes - killing them"
    ps aux|grep $1| grep -v "grep"| awk '{print $2}'| xargs kill
else
    echo "No processes found"
fi

ПРИМЕЧАНИЕ: он НЕ убьет процессы, в командной строке которых есть "grep".

...