2008-10-02 3 views
237

Например, иногда, когда я пытаюсь запустить Firefox, он говорит, что процесс Firefox уже запущен. Поэтому я должен это сделать:Как я могу убить процесс по имени вместо PID?

[email protected]:~$ 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 
[email protected]:~$ kill 7451 

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

[email protected]:~$ killbyname firefox 

Я попытался сделать это в PHP, но Exec («пс Окс»), кажется, только показывает процессы, которые выполняются с Exec() в самом PHP скрипт (так что единственный способ это показывает само)

+0

Когда я получу окно, в котором говорится, что Firefox уже выполняется, мне обычно нужно подождать одну секунду, и я снова смогу запустить Firefox (конечно, это может быть не всегда так). – nuoritoveri 2014-02-24 14:28:47

+1

Это самый безопасный способ, так как JohnB говорит в этом ответе: http://stackoverflow.com/questions/6381229/how-to-kill-all-processes-matching-a-name/19733066#19733066 – tecnoshopbq 2014-05-08 16:03:56

+0

Возможный дубликат [Найти и убить процесс в одной строке с помощью bash и regex] (http://stackoverflow.com/questions/3510673/find-and-kill-a-process-in-one-line-using-bash-and-regex) – tripleee 2016-07-27 10:01:06

ответ

355
pkill firefox 

Дополнительная информация:. http://linux.about.com/library/cmd/blcmdl1_pkill.htm

+1

Уход. Я знал об убийстве, но не о людях. – Bernard 2008-10-02 05:40:45

+4

pgrep тоже хороший. – Trenton 2008-10-02 05:46:38

+6

Использование pgrep для выяснения того, что вы убиваете, прежде чем идти вокруг процессов убийства - это хорошая вещь. Особенно при использовании `-f`. – Akrikos 2013-10-09 12:21:30

55

Вы можете убить процессы, именем с killall <name>

killall посылает сигнал всем процессам, запущенным любой из указанных команд. Если имя сигнала не указано , отправляется SIGTERM.

Сигналы могут быть определены либо путем имени (например -HUP или -SIGHUP) или по номеру (например -1) или с помощью опции -s .

Если имя команды не является регулярным выражением (опция -r) и содержит слэш (/), обрабатывает выполнение, что конкретный файл будет выбран для убийства, независимо от их имени.

Но если вы не видите процесс с ps aux, вы, вероятно, не будет иметь право убить его ...

0

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

35

Немного больше альтернатива:

kill `pidof firefox` 
10

На Mac я не мог найти pgrep и pkill ни был killall работает так написал простой один лайнер сценарий: -

export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid 

Если есть более простой способ сделать это, пожалуйста, поделитесь.

4

правильнее было бы:

export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid 
3

Чтобы убить Grep:

kill -9 `pgrep myprocess` 
48

Также можно использовать:

pkill -f "Process name".

Для меня это идеальная работа, это то, что я искал. В моем случае без флага pkill не работал с именем.

Когда установлено -f, для сопоставления образцов используется полная командная строка.

1

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

enable -n kill

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

1

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

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

Так что я написал небольшой скрипт ш:

#!/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
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $ 
-1

убить -9 $ (пс Окс | Grep -e myprocessname | AWK '{печать $ 2}')

12

Самый простой способ чтобы убедиться, что вы получаете правильные идентификаторы процесса с:

pgrep -f [part_of_a_command] 

Если результат соответствует ожидаемому.Берите с:

pkill -f [part_of_a_command] 
8

Странно, но я не видел решения, как это:

kill -9 `pidof firefox` 

может также убить несколько процессов (несколько ИДП), как:

kill -9 `pgrep firefox` 

I предпочитают pidof, поскольку он имеет однолинейный выход:

> pgrep firefox 
6316 
6565 
> pidof firefox 
6565 6316 
1

Убейте все процессы, имеющие snippet в стартовом пути. Вы можете убить все приложения, запущенные из какого-либо каталога, для размещения/directory/в качестве фрагмента. Это очень полезно при запуске нескольких компонентов для одного и того же приложения из одного и того же каталога приложений.

ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill 
Смежные вопросы