Я запускаю программу в терминале, с помощью которой я не могу сбежать Ctrl-C и что я хочу убить. Как я могу найти его PID?
Откройте другой терминал и запустите ps ax | grep foo
где foo - это имя программы, не отвечающей на запросы. Это должно вернуть строку вывода, которая выглядит примерно так:
$ ps ax | grep firefox2222 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox2231 ? Sl 514:36 /usr/lib/firefox-3.6.9/firefox-bin30290 pts/2 S+ 0:00 grep --color=auto firefox
Первое поле каждой строки вывода представляет собой число, представляющее идентификатор процесса программы, которому соответствует grep
(вы можете смело игнорировать последний, который представляет grep
сам.
Чтобы остановить процесс нарушения, выполните:kill pid
где pid - идентификатор процесса программы. Возможно, вам придется использовать свое суждение относительно того, какое из совпадений должно быть kill
эд, или ты мог бы использовать top
вместо. С помощью kill
сам по себе отправляет SIGTERM, который вы должны попробовать сначала, так как он позволяет программе правильно убирать за собой. Если SIGTERM терпит неудачу, попробуйте SIGHUP, который является более сильным лекарством: kill -HUP pid
. Если все остальное не сработает, отправьте SIGKILL. Но вы должны делать это только в крайнем случае, потому что SIGKILL заставляет ядро немедленно завершать процесс без возможности очистки. Иногда это может привести к повреждению данных или другим проблемам. Итак, еще раз, отправляйте SIGKILL только в крайнем случае. Чтобы сделать это, сделайте kill -KILL pid
или kill -9 pid
.
Если вы используете графический интерфейс, конечно, вам не нужно возиться с этой сумасшедшей командной строкой, чтобы выполнить работу. Просто откройте "Системный монитор", перейдите на вкладку "Процессы", выберите процесс, который вы хотите остановить (Хм, может быть, это тот, который использует 90% процессора?) и щелкните его правой кнопкой мыши. Поскольку процесс уже остановлен, (в этом-то и проблема, верно?) выберите Завершить процесс или Завершить процесс в появившемся меню.
Кредит на коанхед
Я не думаю, что есть какая-либо необходимость в таких длинных командах, когда вы можете выполнять те же команды с помощью pgrep, pkill, pidof и т.д...
- Чтобы получить pid запущенной программы
pgrep:
pgrep [options] pattern
описание : pgrep просматривает текущие запущенные процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout. Все критерии должны совпадать. Например,
-
Чтобы найти процесс с именем sshd, принадлежащий root.
$ pgrep -u root sshd
-
Перечислите процессы, принадлежащие root ИЛИ daemon.
$ pgrep -u root,daemon
пидоф:
описание:
Pidof находит идентификаторы процессов (PID) названных программ. Он выводит эти идентификаторы на стандартный вывод.
синтаксис: pidof имя_программы
-
Чтобы завершить программу с помощью pid, используйте pkillexample:
pkill pid pkill -f process_name pkill -o process_name pkill -n process_name pkill -l process_name
-f
флаг: Выполняет поиск по имени процесса (см. man pkill)-o
флаг: Выберите только самый старый из соответствующих процессов.-n
флаг: Выберите только самый новый из соответствующих процессов.-l
флаг: Укажите имя процесса, а также идентификатор процесса.
Самый простой способ узнать 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 $2'} | xargs kill -9
Это насильственное убийство. Отбросьте "-9", если хотите мягкого убийства.
Если вам нужен только pid (полезно для сценариев автозаполнения и т. Д.)
pgrep -f desired_program_name
Для тех, кто работает под управлением Ubuntu 16.04 LTS, ты должен использовать ps ax
и не только ps
в командной строке, в противном случае вы просто получите процессы, порождаемые конкретным экземпляром терминала, в котором вы находитесь. (обычно просто "bash" [оболочка, в которой вы находитесь] и "ps" [то, что вы только что запустили])
Вы могли бы сделать:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
первые два канала получают информацию о процессе, затем мы пытаемся получить столбец PID, используя сокращение старой школы, а затем мы даем результирующий PID для уничтожения.
Вы также можете открыть другой терминал (или переключиться на другой tty) и запустить top
, который в основном представляет собой текстовую версию системного монитора. В первом столбце указан PID каждого запущенного процесса, который вы можете отключить, нажав K, вводя PID, а затем вводя цифровой сигнал для отправки.
top
или
screen -list|ls
перечислите все pid с соответствующим процессом
kill -[pid]
Это ветвь Что мне делать, когда Ubuntu зависает? в качестве ссылки, чтобы детали в этом вопросе не стали слишком техническими.
Существует команда pidof.