Как найти идентификатор процесса (PID) текущей программы терминалов?

73

Я запускаю программу в терминале, которую я не могу выполнить с помощью Ctrl - C и что я хочу убить. Как я могу найти его PID?

    
задан Jjed 25.08.2012 в 17:00
источник

8 ответов

89

Откройте еще один терминал и запустите 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

    
ответ дан Jjed 13.04.2017 в 14:24
источник
25

Я не думаю, что есть необходимость в таких длинных командах, когда вы можете выполнять те же команды с pgrep, pkill, pidof и т. д.

  • Чтобы получить pid из текущей программы

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: укажите имя процесса, а также идентификатор процесса.

ответ дан Prabhat Kumar Singh 16.06.2014 в 11:07
12

Самый простой способ узнать pid запущенной программы:

pidof <application name>

Например, если вы начали vim и хотите узнать его pid:

pidof vim

Помните, что вам нужно указать точное имя программы, которое было запущено.

Например, если вы используете vi и выполняете pidof vim , вы не получите правильных результатов.

Для получения дополнительной информации см. справочную страницу pidof .

    
ответ дан jobin 16.06.2014 в 11:28
10

Я нашел неплохо использовать регистр без учета регистра, добавив «-i» и используя «aux» вместо «ax», чтобы получить более описательный вывод:

ps aux | grep -i firefox

Если вы хотите убить все процессы, которые вы можете использовать:

ps aux | grep -i firefox | awk {'print '} | xargs kill -9

Это насильственное убийство. Бросьте «-9», если вы хотите мягкое убийство.

    
ответ дан John Foley 24.12.2013 в 17:45
2

Если вы хотите только pid (полезно для скриптов autokill и т. д.)

pgrep -f desired_program_name
    
ответ дан MikeL 10.01.2017 в 14:29
0

Вы также можете открыть другой терминал (или переключиться на другой tty) и запустить top , который представляет собой текстовую версию системного монитора. В первом столбце перечисляется PID каждого запущенного процесса, который вы можете убить, нажав K , введя PID и затем введите числовой сигнал для отправки.

    
ответ дан Waldir Leoncio 16.06.2014 в 13:01
0

Вы можете сделать:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

первые две трубы получают информацию о процессе, затем мы пытаемся получить столбец PID, используя сокращение старой школы, а затем мы даем результат PID для уничтожения.

    
ответ дан Arian Soltani 27.09.2016 в 23:09
0

Для тех, кто использует Ubuntu 16.04 LTS, вы должны использовать ps ax , а не только ps в командной строке, в противном случае вы просто получите нереста процессов от конкретный экземпляр терминала, в котором вы находитесь. (обычно просто «bash» [оболочка, в которой вы находитесь] и «ps» [что вы только что запускали])

    
ответ дан cygnus_x1 10.09.2017 в 16:30