Я запускаю програму в терміналі, з якою я не можу втекти Ctrl- Cі яку хочу вбити. Як я можу знайти його PID?
Я запускаю програму в терміналі, з якою я не можу втекти Ctrl- Cі яку хочу вбити. Як я можу знайти його PID?
Відповіді:
Відкрийте інший термінал і запустіть, ps ax | grep foo
де foo - це назва невідповідальної програми. Це повинно повернути рядок виводу, який виглядає приблизно так:
$ ps ax | grep firefox
2222 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ? Sl 514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2 S+ 0:00 grep --color=auto firefox
Перше поле кожного рядка виводу - це число, яке представляє ідентифікатор процесу програми, узгоджений grep
(ви можете сміливо ігнорувати останнє, яке представляє grep
себе.
Щоб зупинити процес, який порушує правопорушення, виконайте:
kill pid
де pid - ідентифікатор процесу програми. Можливо, вам доведеться використовувати своє судження про те, яке з сірників потрібно kill
відредагувати, або ви можете використовувати його top
замість цього. Використання kill
сама посилає SIGTERM, який ви повинні спробувати спочатку як це дозволяє програмі правильно прибирати за собою. Якщо SIGTERM не вдається, спробуйте SIGHUP, яка stonger медицини: kill -HUP pid
. Якщо все інше не вдалося, надішліть SIGKILL. Але робити це потрібно лише в крайньому випадку, оскільки SIGKILL змушує ядро негайно припинити процес, не маючи можливості для очищення. Це часом може призвести до пошкодження даних або інших проблем. Отже, знову лише надсилайте SIGKILL в крайньому випадку. Для цього зробіть kill -KILL pid
або kill -9 pid
.
Якщо ви користуєтеся графічним інтерфейсом, звичайно, вам не доведеться дурити з цим шаленим командним рядком, щоб виконати роботу. Просто відкрийте «Монітор системи», перейдіть на вкладку «Процеси», виберіть процес, який ви хочете зупинити (Гм, чи може це бути той, який використовує 90% ЦП?) І клацніть правою кнопкою миші. Оскільки процес уже зупинений (це проблема, правда?), Виберіть Закінчити процес або вбити процес у меню, що виходить.
Кредит в koanhead
kill -9
- це погана порада. Я відредагував відповідь, щоб її виправити.
ping
командою та sleep
. За даними unix.stackexchange.com/a/275826/72988 , в Ubuntu це неможливо без multiplexer
.
Я не думаю, що немає необхідності в таких довгих командах, коли ти можеш виконувати ті самі команди за допомогою pgrep, pkill, pidof тощо.
pgrep:
pgrep [options] pattern
ОПИС: pgrep розглядає поточні процеси, що працюють в даний час, і перераховує ідентифікатори процесу, які відповідають критеріям вибору для stdout. Усі критерії повинні відповідати. Наприклад,
Щоб знайти процес з ім'ям sshd, що належить root.
$ pgrep -u root sshd
Перелічіть процеси, що належать корені АБО демону.
$ pgrep -u root,daemon
pidof:
ОПИС :
Pidof знаходить ідентифікатори процесу (pids) названих програм. Він друкує ці ідентифікатори на стандартному виході.
синтаксис: ім'я програми pidof
Щоб вбити програму за допомогою pid, використовуйте приклад pkill:
pkill pid
pkill -f process_name
pkill -o process_name
pkill -n process_name
pkill -l process_name
-f
flag: шукає
-o
прапор process_name (див. man pkill) прапор: виберіть лише найстаріший із відповідних процесів.
-n
прапор: виберіть лише найновіший з відповідних процесів.
-l
прапор: перелічіть назву процесу, а також ідентифікатор процесу.
Найпростіший спосіб дізнатися, чи є програма запущеної програми:
pidof <application name>
Наприклад, якщо ви запустили vim і хочете знати його pid:
pidof vim
Пам'ятайте, що вам потрібно буде вказати точну назву програми, яка була запущена.
Наприклад, якщо ви працюєте з vi та виконуєте, pidof vim
ви не отримаєте правильних результатів.
Для pidof
отримання додаткової інформації див . Сторінку з посібником.
pidof mysqld
повертає PID. Однак якщо я pidof Mariadb
нічого не ввожу, не повертається. Це однаковий PID і для MariaDB, і для MySQL?
Я знайшов, що приємно використовувати нечутливий до регістру пошук, додавши "-i" та використовуючи "aux" замість "ax", щоб отримати більш описовий результат:
ps aux | grep -i firefox
Якщо ви хочете вбити всі процеси, які ви можете використовувати:
ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9
Це насильне вбивство. Киньте "-9", якщо хочете м'якого вбити.
ps aux | grep -i firefox...
процес, оскільки він містить текст firefox
у своїй команді!
grep -i firefo[x]
лише для firefox
Для тих, хто працює з Ubuntu 16.04 LTS, ви повинні використовувати, ps ax
а не тількиps
в командному рядку, інакше ви просто отримаєте процеси, що нереститься з конкретного термінального екземпляра, в якому ви перебуваєте. ] і 'ps' [що ви тільки що бігли])
ps -e
(показує всі) і ps -ejH
(показує дерево процесу).
Ви також можете відкрити інший термінал (або переключитися на інший tty) та запустити top
, що в основному є текстовою версією System Monitor. Перший стовпець перераховує PID кожного запущеного процесу, який ви можете вбити, натиснувши K, ввівши PID, а потім ввівши числовий сигнал для надсилання.
Ви можете зробити:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
спочатку дві труби отримують інформацію про процес, далі ми намагаємося отримати стовпчик PID, використовуючи розріз old-school, а потім даємо отриманий PID вбити.
kill -9
це найбільший пістолет, який ви повинні вбити. Спершу слід спробувати більш щадний сигнал, перш ніж вдаватися до SIGKILL, щоб дати можливість процесу очистити його ресурси.