Найти и убить процесс в одной строке, используя 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 ]

3 голосов
/ 18 августа 2010
ps -o uid,pid,cmd|awk '{if($1=="username" && $3=="your command") print $2}'|xargs kill -15
3 голосов
/ 13 мая 2014

Введите -f для pkill

pkill -f /usr/local/bin/fritzcap.py

Точный путь к файлу .py:

# ps ax | grep fritzcap.py
 3076 pts/1    Sl     0:00 python -u /usr/local/bin/fritzcap.py -c -d -m
3 голосов
/ 18 августа 2010

Метод, использующий только awkps):

ps aux | awk '$11" "$12 == "python csp_build.py" { system("kill " $2) }'

С помощью проверки на равенство строк я предотвращаю сопоставление самого процесса.

2 голосов
/ 10 августа 2015

Я начал использовать что-то вроде этого:

kill $(pgrep 'python csp_build.py')
1 голос
/ 24 мая 2015

В некоторых случаях я хотел бы уничтожить процессы одновременно следующим образом:

➜  ~  sleep 1000 &
[1] 25410
➜  ~  sleep 1000 &
[2] 25415
➜  ~  sleep 1000 &
[3] 25421
➜  ~  pidof sleep
25421 25415 25410
➜  ~  kill `pidof sleep`
[2]  - 25415 terminated  sleep 1000                                                             
[1]  - 25410 terminated  sleep 1000
[3]  + 25421 terminated  sleep 1000

Но, я думаю, это немного неуместно в вашем случае. (Может быть, там работает Python,Python B, Python X ... в фоновом режиме.)

1 голос
/ 10 марта 2014

Вам не нужен пользовательский переключатель для пс.

kill `ps ax | grep 'python csp_build.py' | awk '{print $1}'`
1 голос
/ 08 января 2014

Убивать наши собственные процессы, начатые с общего PPID довольно часто, pkill , связанный с флагом –P, является для меня победителем. Используя пример @ ghostdog74:

# sleep 30 &                                                                                                      
[1] 68849
# sleep 30 &
[2] 68879
# sleep 30 &
[3] 68897
# sleep 30 &
[4] 68900
# pkill -P $$                                                                                                         
[1]   Terminated              sleep 30
[2]   Terminated              sleep 30
[3]-  Terminated              sleep 30
[4]+  Terminated              sleep 30
1 голос
/ 30 апреля 2019

Это вернет только pid

pgrep -f 'process_name'

Таким образом, чтобы убить любой процесс в одной строке:

kill -9 $(pgrep -f 'process_name')

или, если вы знаете точное имя процесса, вы также можетепопробуйте pidof:

kill -9 $(pidof 'process_name')

Но, если вы не знаете точное имя процесса, лучше будет pgrep.

Если существует несколько процессов, работающих с одним и тем же именем,и затем вы хотите убить первого:

kill -9 $(pgrep -f 'process_name' | head -1)

Также отметим, что, если вас беспокоит чувствительность к регистру, вы можете добавить опцию -i, как в grep.Например:

kill -9 $(pgrep -fi chrome)

Более подробная информация о сигналах и pgrep в man 7 signal или man signal и man pgrep

0 голосов
/ 12 марта 2014

Я использую это, чтобы убить Firefox, когда сценарий захлопывается, и процессор избивает :) Замените «Firefox» на приложение, которое вы хотите умереть. Я в оболочке Bash - OS X 10.9.3 Darwin.

kill -Hup $(ps ux | grep Firefox | awk 'NR == 1 {next} {print $2}' | uniq | sort)

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

Вы можете использовать приведенную ниже команду для вывода pid команды. Используйте top или лучше используйте htop для просмотра всех процессов в linux. Здесь я хочу убить процесс с именем

ps -ef | grep '/usr/lib/something somelocation/some_process.js'  | grep -v grep | awk '{print $2}'

И проверь пид. Это должно быть правильно. Чтобы убить их, используйте команду kill.

sudo kill -9 `ps -ef | grep '/usr/lib/something somelocation/some_process.js'  | grep -v grep | awk '{print $2}'`

Например: - из списка процессов htop.

sudo kill -9 `ps -ef | grep '<process>'  | grep -v grep | awk '{print $2}'`

Это решает мои проблемы. Всегда будьте готовы перезапустить процесс, если вы случайно убили процесс.

...