Я запускаю программу в терминале, которую я не могу выполнить с помощью 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
ed, или вместо этого вы можете использовать top
. Использование kill
само по себе отправляет SIGTERM, который вы должны попробовать сначала, так как он позволяет программе правильно очищать после себя. Если SIGTERM терпит неудачу, попробуйте SIGHUP, который является более жестким лекарством: kill -HUP pid
. Если все остальное не удается, отправьте SIGKILL. Но вы должны сделать это только в крайнем случае, потому что SIGKILL заставляет ядро немедленно прекратить процесс без возможности очистки. Иногда это может привести к повреждению данных или другим проблемам. Поэтому снова отправьте SIGKILL в крайнем случае. Для этого сделайте kill -KILL pid
или kill -9 pid
.
Если вы используете графический интерфейс, конечно, вам не нужно обманывать эту сумасшедшую статью командной строки, чтобы выполнить эту работу. Просто откройте «Системный монитор», перейдите на вкладку «Процессы», выберите процесс, который вы хотите остановить (Hm, может быть, он использует 90% CPU?) И щелкните его правой кнопкой мыши. Поскольку процесс уже остановлен (это проблема, не так ли?), Выберите в появившемся меню команду «Завершить процесс» или «Убить процесс».
Кредит koanhead
Я не думаю, что есть необходимость в таких длинных командах, когда вы можете выполнять те же команды с pgrep, pkill, pidof и т. д.
pgrep:
pgrep [options] pattern
ОПИСАНИЕ: pgrep просматривает текущие процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout. Все критерии должны соответствовать. Например,
Чтобы найти процесс с именем sshd, принадлежащим root. Р>
$ pgrep -u root sshd
Список процессов, принадлежащих демонам root 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: Ищет имя процесса (см. man pkill)
-o
flag: выберите только самый старый из процессов сопоставления.
-n
flag: выберите только самый новый из процессов сопоставления.
-l
flag: укажите имя процесса, а также идентификатор процесса.
Самый простой способ узнать pid запущенной программы:
pidof <application name>
Например, если вы начали vim и хотите узнать его pid:
pidof vim
Помните, что вам нужно указать точное имя программы, которое было запущено.
Например, если вы используете vi и выполняете pidof vim
, вы не получите правильных результатов.
Для получения дополнительной информации см. справочную страницу pidof
.
Я нашел неплохо использовать регистр без учета регистра, добавив «-i» и используя «aux» вместо «ax», чтобы получить более описательный вывод:
ps aux | grep -i firefox
Если вы хотите убить все процессы, которые вы можете использовать:
ps aux | grep -i firefox | awk {'print '} | xargs kill -9
Это насильственное убийство. Бросьте «-9», если вы хотите мягкое убийство.
Если вы хотите только pid (полезно для скриптов autokill и т. д.)
pgrep -f desired_program_name
Вы также можете открыть другой терминал (или переключиться на другой tty) и запустить top
, который представляет собой текстовую версию системного монитора. В первом столбце перечисляется PID каждого запущенного процесса, который вы можете убить, нажав K , введя PID и затем введите числовой сигнал для отправки.
Вы можете сделать:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
первые две трубы получают информацию о процессе, затем мы пытаемся получить столбец PID, используя сокращение старой школы, а затем мы даем результат PID для уничтожения.
Для тех, кто использует Ubuntu 16.04 LTS, вы должны использовать ps ax
, а не только ps
в командной строке, в противном случае вы просто получите нереста процессов от конкретный экземпляр терминала, в котором вы находитесь. (обычно просто «bash» [оболочка, в которой вы находитесь] и «ps» [что вы только что запускали])