Я запускаю в терминале программу, с которой не могу сбежать 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% ЦП?) И щелкните по нему правой кнопкой мыши. Поскольку процесс уже остановлен (это проблема, верно?), Выберите «Завершить процесс» или «Убить процесс» из появившегося меню.
Кредит Коанхеду
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
Список процессов, принадлежащих корневому оператору OR.
$ 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: поиск по методу process_name (см. man pkill)
-o
: выбор только самого старого из соответствующих процессов.
-n
флаг: Выберите только самый новый из соответствующих процессов.
-l
флаг: перечислить имя процесса, а также идентификатор процесса.
Самый простой способ узнать pid работающей программы - использовать:
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
в командной строке, в противном случае вы просто получите процессы, порождаемые конкретным экземпляром терминала, в котором вы находитесь (обычно просто «bash» [оболочка, в которой вы находитесь) ] и 'ps' [что вы только что запустили])
ps -e
(показывает все) и ps -ejH
(показывает дерево процессов).
Вы также можете открыть другой терминал (или переключиться на другой tty) и запустить top
, что в основном является текстовой версией системного монитора. В первом столбце перечислены PID каждого запущенного процесса, который можно убить, нажав K, введя PID и затем введя числовой сигнал для отправки.
Вы могли бы сделать:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
первые два канала получают информацию о процессе, затем мы пытаемся получить столбец PID, используя срез старой школы, а затем даем полученный PID для уничтожения.
kill -9
это самое большое оружие, которое вам нужно, чтобы убить процесс. Прежде чем прибегнуть к SIGKILL, вы должны попробовать более осторожный сигнал, чтобы дать процессу возможность очистить свои ресурсы.