Пошук ідентифікатора процесу та вбивство


16

Коли мені потрібно вбити фоновий процес, який я виконую ps -e | grep <process_name>

Хто друкує щось подібне 1766 ? 00:00:13 conky, тоді я використовую ідентифікатор процесу до killнього так kill 1766.

Чи є спосіб я спростити це? Зробити це швидше? зменшити кількість друку?


1
Я отримав відповідь, яку хочу, але зачекаю деякий час, перш ніж прийняти, щоб громада могла скористатися різними доступними варіантами.
Гаутам

Будь ласка, сміливо зробіть це питання по можливості більш загальним, щоб більше людей могли отримати користь від відповідей
Гаутам

Відповіді:


19

(TL, ДР: pgrep, pkill)

Багато варіантів Unix поставляються разом із pgrepсупутником та його супутником pkill: Solaris , Linux (частина стандартних утилітів процесів , можливо, відсутні у вбудованих системах Linux), FreeBSD , OpenBSD , NetBSD , ... але тільки від MacPorts на OS X , а не AIX і тільки останнім часом у HP-UX . pgrepУтиліта показує ідентифікатор процесу процесів підібраних по імені, користувачеві і кілька інших критеріїв. Аргумент to pgrepінтерпретується як регулярний вираз, який повинен відповідати частині імені виконавчого файлу процесу (якщо ви не передаєте параметр, щоб змінити це). Якщо ви телефонуєте pkillзамістьpgrep, утиліта передає сигнал замість відображення ідентифікаторів процесу.

Ще одна подібна утиліта - pidof . В Linux він надається SysVinit або BusyBox (тому ви часто знаходите його у вбудованій системі Linux, яка не має pgrep); Є також порти на інших варіантах unix. У pidofутиліти є менше можливостей, вона здебільшого відповідає лише цілим іменам виконуваних файлів. Його супутня утиліта killallпередає сигнал на відповідні програми¹.

¹ бережися, killallмає інше значення на Solaris і , можливо , інші варіанти Unix; не вводити killallяк root на Solaris.


Вау Ваша відповідь дуже детальна, набагато глибше, Дякую. Відредагуйте питання, щоб відповісти, якщо це можливо.
Гаутам

@GautamK Я не думаю, що питання потрібно розширювати. Якщо ви це зробите, сміливо редагуйте це самостійно.
Жил "ТАК - перестань бути злим"

З відповідей з найбільшою кількістю голосів Ваша відповідь дає більше деталей, тому я приймаю її
Гаутам

8
  • killall ProcessName (є недоліком цієї команди в тому, що ви не завжди знаєте назву програми в програмі).
  • pidof ProccessName і kill the result form pidof
  • ps xu | grep <process name> | grep -v grep | awk '{ print $2 }' | xargs kill -9 Спробуйте цей один рядок і повторно використовуйте його, щоб створити історію вашого башу, або краще створити псевдонім для нього.

Друга pidofздається трохи легшою, але все-таки вона займає 2 кроки
Гаутам

Я можу шукати / створювати команду з одним рядком, яка виконує це за один крок (з грубою назвою процесу), але це вимагатиме від вас ввести довгий рядок (що складніше, ніж два кроки вище), або ви можете ввести його один раз і повторно використовувати його з історії.
Ханан Н.

@GautamK Я оновив відповідь за допомогою параметра єдиної команди.
Ханан Н.

6

Поки у Ханана є кілька хороших пропозицій, я додам pgrep/ pkill. Вони дозволяють набагато тонший контроль над тим, який процес ви знайдете, і регулярними виразами, якщо ви не знаєте точного процесу, який вам потрібно буде вбити.

PS Hanan's pidofможна подавати killбезпосередньо за допомогою зворотного зв'язку:

kill `pidof processname`

pkillбуло саме те , що я шукав, я більшу частину часу за відомою назвою процесу, в основному його conkyабо firefoxабо chromeабо що - щось подібне. Спасибі
Гаутам

1

Як щодо цього -

ps -e | awk '$4~/<process name>/{print $1}' | xargs kill

Приклад:

[jaypal:~/Temp] sleep 100&
[1] 74863
[jaypal:~/Temp] ps -e | awk '$4~/sleep/{print $1}' | xargs kill
[1]+  Terminated: 15          sleep 100

Оновлення:

До жаль, це , очевидно , не відповідає вимогам менше друкувати так хороший спосіб зробити це було б додати functionдо вашого .bashrc, .profileабо будь-який інший сценарій запуску. Функція може бути приблизно такою -

killp() {
awk -v pname="$1" '($4==pname){print $1}' <(ps -e) | xargs kill
}

Після додавання ви можете просто передати ім’я свого процесу:

[jaypal:~] sleep 100&
[1] 77212
[jaypal:~] killp sleep
[1]+  Terminated: 15          sleep 100
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.