5

Как убить процесс по имени вместо PID в Linux?

23

Проблема с завершением процесса Firefox

Когда я пытаюсь запустить 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

Меня бы устроила команда, которая могла бы выполнять все эти действия автоматически. Она должна принимать строку с именем процесса (например, "firefox"), искать его в списке процессов и убивать все найденные процессы.

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

Есть ли возможность создать такую команду в Bash или PHP, которая бы автоматизировала этот процесс?

5 ответ(ов)

7

Команда pkill firefox используется в Unix-подобных операционных системах для завершения всех процессов, связанных с приложением Firefox. Эта команда посылает сигнал завершения (по умолчанию SIGTERM) всем процессам, имя которых совпадает с "firefox".

Если вы хотите использовать pkill, убедитесь, что у вас есть соответствующие права для завершения процессов. В случае, если вам необходимо завершить процесс с помощью другой команды, например, kill или killall, вы можете использовать их, указав идентификатор процесса или полное имя приложения.

Дополнительную информацию о pkill можно найти по следующей ссылке: http://linux.about.com/library/cmd/blcmdl1_pkill.htm.

2

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

pkill -f "Имя процесса"

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

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

0

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

pgrep -f [часть_команды]

Если результат соответствует ожиданиям, продолжайте с:

pkill -f [часть_команды]

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

kill -9 $(pgrep -f [часть_команды])

Если хотите быть на безопасной стороне и завершать только те процессы, которые вы изначально запустили, добавьте ключ -u с вашим именем пользователя:

pkill -f [часть_команды] -u [имя_пользователя]
0

Вы можете использовать команду kill вместе с выводом команды pidof для завершения всех процессов Firefox. Вот как это можно сделать:

kill `pidof firefox`

Эта команда сначала находит все идентификаторы процессов (PID) для запущенных экземпляров Firefox с помощью команды pidof, а затем передает их в команду kill, чтобы завершить эти процессы.

Если вам нужно более безопасно завершить процессы, вы можете использовать сигнал, например, SIGTERM:

kill -TERM `pidof firefox`

Или, если вы хотите завершить процессы силой (например, когда стандартное завершение не срабатывает), вы можете использовать SIGKILL:

kill -KILL `pidof firefox`

Обратите внимание, что использование обратных кавычек (`) может быть заменено на $() для лучшей читаемости:

kill $(pidof firefox)

Этот подход более современный и удобный для чтения.

0

Чтобы завершить все процессы, запускаемые из определенной директории, можно использовать "snippet" для указания пути. Это особенно полезно, когда вы запускаете несколько компонентов одного приложения из одной и той же директории.

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

ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill

Если у вас есть pgrep, предпочтительно использовать его, так как это более элегантный способ. Вот пример команды с использованием pgrep:

pgrep -f <snippet> | xargs kill

Здесь -f позволяет pgrep искать по полному пути, а xargs kill завершает процессы с найденными идентификаторами. Убедитесь, что вы запускаете эту команду с достаточными правами (возможно, с sudo), если процессы требуют этого.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь