Ответ 1
pkill firefox
Дополнительная информация: http://linux.about.com/library/cmd/blcmdl1_pkill.htm
Иногда, когда я пытаюсь запустить Firefox, он говорит: "Процесс Firefox уже запущен". Так что я должен сделать это:
[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('ps aux')
кажется, показывает только процессы, которые были выполнены с exec()
в самом скрипте PHP (поэтому единственный процесс, который он показывает, это сам).
pkill firefox
Дополнительная информация: http://linux.about.com/library/cmd/blcmdl1_pkill.htm
Также возможно использование:
pkill -f "Process name"
.
Для меня это сработало идеально. Это было то, что я искал. pkill не работает с именем без флага.
Когда установлено -f
, полная командная строка используется для сопоставления с образцом.
Вы можете убить процессы по имени с помощью killall <name>
killall отправляет сигнал всем процессам, выполняющим любую из указанных команд. Если имя сигнала не указано, отправляется SIGTERM.
Сигналы могут быть указаны либо по имени (например, -HUP или -SIGHUP), либо по номеру (например, -1), либо с помощью опции -s.
Если имя команды не является регулярным выражением (опция -r) и содержит косую черту (/), процессы, выполняющие этот конкретный файл, будут выбраны для уничтожения независимо от их имени.
Но если вы не видите процесс с помощью ps aux
, вы, вероятно, не будете иметь права убивать его...
Более длинная альтернатива:
kill `pidof firefox`
Самый простой способ - сначала проверить, что вы получаете правильные идентификаторы процессов:
pgrep -f [part_of_a_command]
Если результат будет таким, как ожидалось. Пойдите с:
pkill -f [part_of_a_command]
Странно, но я не видел решения вроде этого:
kill -9 `pidof firefox`
он может также убить несколько процессов (несколько pids), например:
kill -9 `pgrep firefox`
Я предпочитаю pidof
, поскольку он имеет один вывод строки:
> pgrep firefox
6316
6565
> pidof firefox
6565 6316
На Mac я не мог найти pgrep и pkill, ни один из них не работал, поэтому написал простой один лайнер script: -
export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid
Если есть более простой способ сделать это, разделите.
Используя команду #killall
:
#killall -9 <processname>
Убить все процессы, имеющие snippet
в пути запуска. Вы можете убить все приложения, запущенные из некоторого каталога, добавив /directory/в качестве фрагмента. Это очень полезно, когда вы запускаете несколько компонентов для одного и того же приложения из одного каталога приложений.
ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill
* Я бы предпочел pgrep, если доступно
Чтобы убить с помощью grep:
kill -9 `pgrep myprocess`
более правильным будет:
export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid
Я обычно использую команду killall подробнее см. здесь.
Я задавал себе тот же вопрос, но проблема с текущими ответами в том, что они не безопасно проверяют, что процессы будут убиты, поэтому... это может привести к ужасным ошибкам:)... особенно если несколько процессов соответствуют шаблону.
Как отказ от ответственности, я не профессионал, и, безусловно, есть возможности для улучшения.
Итак, я написал немного sh script:
#!/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
Команда kill
по умолчанию принимает имена команд в качестве альтернативы PID. См. kill (1). Часто возникающая проблема заключается в том, что bash
предоставляет свой собственный kill
, который принимает номера заданий, такие как kill %1
, но не имена команд. Это препятствует команде по умолчанию. Если прежняя функциональность более полезна для вас, чем последняя, вы можете отключить версию bash
, вызвав
enable -n kill
Для получения дополнительной информации см. записи kill
и enable
в bash (1).
Если вы запустите GNOME, вы можете использовать системный монитор (System- > Administration- > System Monitor) для уничтожения процессов, как в Windows. KDE будет иметь что-то подобное.
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $
kill -9 $(ps aux | grep -e myprocessname | awk '{print $2}')
awk oneliner, который анализирует заголовок вывода ps
, поэтому вам не нужно заботиться о номерах столбцов (кроме имен столбцов). Поддержка регулярных выражений. Например, чтобы убить все процессы, имя исполняемого файла (без пути) которых содержит слово "firefox", попробуйте
ps -fe | awk 'NR==1{for (i=1; i<=NF; i++) {if ($i=="COMMAND") Ncmd=i; else if ($i=="PID") Npid=i} if (!Ncmd || !Npid) {print "wrong or no header" > "/dev/stderr"; exit} }$Ncmd~"/"name"$"{print "killing "$Ncmd" with PID " $Npid; system("kill "$Npid)}' name=.*firefox.*