Я запускаю в терминале программу, с которой не могу сбежать Ctrl- Cи которую хочу убить. Как я могу найти его PID?
command-line
process
Jjed
источник
источник
Ответы:
Откройте другой терминал и запустите,
ps ax | grep foo
где foo - имя не отвечающей программы. Это должно вернуть строку вывода, которая выглядит примерно так:Первое поле каждой строки вывода - это число, представляющее идентификатор процесса программы, которой соответствует
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 просматривает запущенные в данный момент процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout. Все критерии должны соответствовать. Например,
Чтобы найти процесс с именем sshd, принадлежащий пользователю root.
Список процессов, принадлежащих корневому оператору OR.
pidof:
ОПИСАНИЕ :
Pidof находит идентификаторы процесса (pids) названных программ. Он выводит эти идентификаторы на стандартный вывод.
синтаксис: pidof имя_программы
Чтобы убить программу с помощью pid, используйте пример pkill:
-f
flag: поиск по методу process_name (см. man pkill)-o
: выбор только самого старого из соответствующих процессов.-n
флаг: Выберите только самый новый из соответствующих процессов.-l
флаг: перечислить имя процесса, а также идентификатор процесса.источник
Самый простой способ узнать pid работающей программы - использовать:
Например, если вы запустили vim и хотите узнать его pid:
Помните, что вам нужно будет указать точное название программы, которая была запущена.
Например, если вы запускаете vi и запускаете,
pidof vim
вы не получите правильных результатов.Обратитесь к
pidof
странице руководства для получения дополнительной информации.источник
pidof mysqld
возвращает PID. Однако, если я наберу,pidof Mariadb
ничего не возвращается. Это один и тот же PID для MariaDB и MySQL?Я обнаружил, что было бы неплохо использовать поиск без учета регистра, добавив «-i» и используя «aux» вместо «ax», чтобы получить более описательный вывод:
Если вы хотите убить все процессы, которые вы можете использовать:
Это насильственное убийство. Бросьте «-9», если хотите мягкого убийства.
источник
ps aux | grep -i firefox...
процесс, потому что он содержит текстfirefox
в своей команде!grep -i firefo[x]
чтобы соответствовать только Firefox-9
сkill
, смотрите здесь для объясненийЕсли вам нужен только pid (полезно для сценариев автоматического убийства и т. Д.)
источник
Для тех, кто использует Ubuntu 16.04 LTS, вы должны использовать,
ps ax
а не толькоps
в командной строке, в противном случае вы просто получите процессы, порождаемые конкретным экземпляром терминала, в котором вы находитесь (обычно просто «bash» [оболочка, в которой вы находитесь) ] и 'ps' [что вы только что запустили])источник
ps -e
(показывает все) иps -ejH
(показывает дерево процессов).Вы также можете открыть другой терминал (или переключиться на другой tty) и запустить
top
, что в основном является текстовой версией системного монитора. В первом столбце перечислены PID каждого запущенного процесса, который можно убить, нажав K, введя PID и затем введя числовой сигнал для отправки.источник
Вы могли бы сделать:
первые два канала получают информацию о процессе, затем мы пытаемся получить столбец PID, используя срез старой школы, а затем даем полученный PID для уничтожения.
источник
kill -9
это самое большое оружие, которое вам нужно, чтобы убить процесс. Прежде чем прибегнуть к SIGKILL, вы должны попробовать более осторожный сигнал, чтобы дать процессу возможность очистить свои ресурсы.или же
перечислить все pid с соответствующим процессом
источник