Как я могу убить процесс по имени вместо PID? - PullRequest
298 голосов
/ 02 октября 2008

Иногда, когда я пытаюсь запустить Firefox, он говорит: «Процесс Firefox уже запущен». Поэтому я должен сделать это:

jeremy@jeremy-desktop:~$ ps aux | grep firefox
jeremy    7451 25.0 27.4 170536 65680 ?        Sl   22:39   1:18 /usr/lib/firefox-3.0.1/firefox
jeremy    7578  0.0  0.3   3004   768 pts/0    S+   22:44   0:00 grep firefox
jeremy@jeremy-desktop:~$ kill 7451

То, что я хотел бы, это команда, которая сделает все это для меня. Он будет принимать входную строку и grep для нее (или чего-либо другого) в списке процессов и уничтожит все процессы в выводе:

jeremy@jeremy-desktop:~$ killbyname firefox

Я пытался сделать это в PHP, но exec('ps aux'), кажется, показывает только процессы, которые были выполнены с exec() в самом скрипте PHP (поэтому единственный процесс, который он показывает, это сам.)

Ответы [ 17 ]

4 голосов
/ 23 мая 2014

правильнее будет:

export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid
3 голосов
/ 02 октября 2008

Обычно я использую команду killall , подробности см. Здесь .

2 голосов
/ 22 февраля 2016

Я задавал себе тот же вопрос, но проблема с текущими ответами в том, что они не безопасно проверяют процессы, которые должны быть убиты , так что ... это может привести к ужасным ошибкам :) особенно если несколько процессов соответствуют шаблону .

Как заявление об отказе от ответственности, я не профессионал, и, безусловно, есть место для улучшения.

Итак, я написал небольшой сценарий sh:

#!/bin/sh

killables=$(ps aux | grep $1 | grep -v mykill | grep -v grep)
if [ ! "${killables}" = "" ]
then
  echo "You are going to kill some process:"
  echo "${killables}"
else
  echo "No process with the pattern $1 found."
  return
fi
echo -n "Is it ok?(Y/N)"
read input
if [ "$input" = "Y" ]
then
  for pid in $(echo "${killables}" | awk '{print $2}')
  do
    echo killing $pid "..."
    kill $pid 
    echo $pid killed
  done
fi
1 голос
/ 15 декабря 2015

Команда по умолчанию kill принимает имена команд в качестве альтернативы PID. См. kill (1) . Часто встречающаяся проблема заключается в том, что bash предоставляет свой собственный kill, который принимает номера заданий, например kill %1, но не имена команд. Это мешает команде по умолчанию. Если первая функциональность более полезна для вас, чем последняя, ​​вы можете отключить версию bash, позвонив по номеру

enable -n kill

Для получения дополнительной информации см. kill и enable записи в bash (1) .

0 голосов
/ 02 октября 2008

Если вы запускаете GNOME, вы можете использовать системный монитор (System-> Administration-> System Monitor), чтобы завершить процессы, как в Windows. У KDE будет что-то похожее.

0 голосов
/ 21 июня 2016

kill -9 $ (ps aux | grep -e myprocessname | awk '{print $ 2}')

0 голосов
/ 11 мая 2016
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...