- Как найти PID процесса Linux с помощью pidof или pgrep
- Что такое идентификатор процесса Linux?
- Как получить PID Linux с помощью команды pidof
- Как найти PID с помощью команды pgrep в Linux
- Несколько слов о владении PID
- Как узнать PID процесса в Linux
- Как узнать pid процесса Linux
- 1. ps
- 2. pgrep
- 3. pidof
- 4. pstree
- Как узнать PID скрипта
- Каким процессом занят файл Linux
- Кто использовал файл в Linux
- Какой процесс использует порт в Linux
- Выводы
Как найти PID процесса Linux с помощью pidof или pgrep
Описание: Чтобы узнать идентификатор процесса Linux, используйте команду pidof, например: pidof examplename. Если вы знаете только часть имени PID, вы можете вместо этого использовать «pgrep examplenamefragment». Замените «examplename» и «examplenamefragment» словами, которые вы хотите найти.
Работа с процессом Linux часто означает знание его идентификатора процесса или PID. Это уникальный номер, присваиваемый каждому работающему программному обеспечению. Вот два способа узнать, что это такое.
Что такое идентификатор процесса Linux?
Внутри Linux отслеживает свои запущенные процессы, присваивая им уникальный идентификационный номер, называемый идентификатором процесса или PID. Каждое запущенное приложение, утилита и демон имеют PID.
PID — это простые целочисленные значения. Вновь запущенный процесс получит PID на единицу больше, чем последний выданный PID. Таким образом, процесс с наивысшим PID является самым новым, т. е. самым последним запущенным процессом. Это продолжается до тех пор, пока система не достигнет максимального значения PID.
Верхний предел для PID равен 32768. Как только эта цифра достигнута, Linux возвращается к началу и ищет PID, который стал свободным, потому что процесс, который ранее им владел, завершился.
Процесс с PID 1 — это первый процесс, который запускается при запуске Linux процессами загрузки. В системах на основе systemd это будет systemd . В других системах это, скорее всего, init , хотя в некоторых дистрибутивах Linux используются альтернативы, такие как OpenRc или s6.
Иногда бывает полезно узнать PID процесса, обычно потому, что вы хотите выполнить какое-то действие над этим процессом. Вот два разных способа найти PID процесса, когда вы знаете имя процесса.
Как получить PID Linux с помощью команды pidof
Команду pidof можно рассматривать как комбинацию «PID» и «of». Это все равно, что спросить, какой у этого процесса PID? Если мы используем команду без параметров, она ничего не делает. Он молча возвращает вас в командную строку. Нам нужно указать имя процесса.
pidof сообщает нам, что PID оболочки Bash равен 8304. Мы можем проверить это с помощью команды ps . Все, что нам нужно сделать, это вызвать ps без параметров. Он сообщит о процессах, запущенных в текущем сеансе.
Поскольку ps сообщает обо всех процессах, которые он может найти, включая самого себя, он сообщает нам, что запущен процесс bash и процесс ps . Как и следовало ожидать, процесс bash имеет тот же PID, о котором сообщил pidof .
Если у вас открыто более одного окна терминала, pidof сообщит обо всех них.
Обратите внимание, что идентификаторы PID перечислены от самого высокого к самому низкому или, другими словами, от самого последнего к самому старому.
Чего это не показывает, так это того, что вы не можете быть владельцем всех этих процессов. pidof находит все процессы с совпадающими именами, независимо от того, кому они принадлежат. Давайте посмотрим глубже, направив вывод в grep . Мы используем параметры -e (выбрать все процессы) и -f (полный список) с параметрами ps .
Два процесса bash принадлежат пользователю dave, третий — пользователю mary.
Иногда одно приложение генерирует множество процессов, каждый из которых получает свой PID. Это то, что мы получаем с Google Chrome.
По умолчанию pidof сообщает обо всех процессах. Если мы хотим, мы можем запросить только самый последний из этих процессов. Опция -s (одиночный выстрел) делает именно это.
Использовать команду kill для ручного уничтожения всех процессов chrome было бы утомительно. Если мы захватим список процессов в переменную, мы сможем передать эту переменную команде kill . Команда kill может принимать несколько PID в своей команде, поэтому она с радостью принимает наш ввод и уничтожает все процессы для нас.
Первая команда собирает вывод из pidof и присваивает его нашей переменной, которую мы называем pid . Нам не нужно echo выводить его на экран, мы просто делаем это, чтобы показать, что содержит наша переменная.
Мы передаем переменную команде kill , затем снова используем pidof , чтобы проверить, остались ли какие-либо процессы Chrome. Все они были убиты.
Одной из особенностей pidof является то, что он не возвращает PID сценария оболочки. Он возвращает PID оболочки bash , на которой запущен скрипт. Чтобы увидеть оболочку, в которой запущен скрипт, нам нужно использовать параметр -x (скрипты).
pidof возвращает PID оболочки bash, а ps показывает, что запущены две оболочки. Одна — это оболочка, выполняющая команду pidof , а другая — оболочка, выполняющая сценарий.
Как найти PID с помощью команды pgrep в Linux
Команда pgrep немного похожа на pidof при получении идентификаторов процессов в Linux. Однако он не только находит процессы, точно соответствующие ключу поиска, но также возвращает PID любых процессов, имя которых содержит искомый текст.
Вот пример на компьютере, на котором запущен Firefox.
Все эти команды находят процесс Firefox и возвращают PID. Но если бы вы ввели команду:
Само по себе, как бы вы узнали, что pgrep нашел Firefox, а не, скажем, демона по имени preformd?
Если вы добавите параметр -l (имя списка), pgrep отобразит имя процесса рядом с PID.
Если существует несколько экземпляров совпадающего процесса, они все перечислены.
Обратите внимание, что они перечислены в порядке возрастания, что противоположно выходным данным pidof . Они перечислены от самого старого процесса к самому новому процессу. Как мы видели на примере pidof , не все перечисленные процессы обязательно принадлежат вам.
Параметр -u (идентификатор пользователя) позволяет вам искать процессы, соответствующие искомому тексту и принадлежащие указанному пользователю.
На этот раз мы видим в результатах три bash-процесса. Другой используется mary .
Мы можем объединить имена пользователей в виде списка, разделенного запятыми.
И мы можем попросить посмотреть все процессы для конкретного пользователя.
Чтобы увидеть полную командную строку, используйте параметр -a (полный список).
Несколько слов о владении PID
Не все системные процессы принадлежат пользователю root. Многие, конечно, но не все. Например, эта команда работает:
Но эта команда не работает.
Это не удается, потому что root не владеет этим процессом. Фактический владелец — системный пользователь по имени «avahi». При использовании правильного имени пользователя команда работает.
pgrep -u avahi avahi-daemon
Это небольшая проблема, на которую стоит обратить внимание.
Linux Commands | |
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts
Как узнать PID процесса в Linux
Каждый процесс в операционной системе имеет свой уникальный идентификатор, по которому можно получить информацию об этом процессе, а также отправить ему управляющий сигнал или завершить.
В Linux такой идентификатор называется PID, и узнать его можно несколькими способами. В этой статье мы рассмотрим, как узнать PID процесса в Linux, а также зачем это может вам понадобиться.
Как узнать pid процесса Linux
1. ps
Самый распространённый способ узнать PID Linux — использовать утилиту ps:
ps aux | grep имя_процесса
Кроме нужного нам процесса, утилита также выведет PID для grep, ведь процесс был запущен во время поиска. Чтобы его убрать, добавляем такой фильтр:
ps aux | grep имя_процесса | grep -v grep
Например, узнаём PID всех процессов, имя которых содержит слово «Apache»:
ps aux | grep apache | grep -v grep
2. pgrep
Если вам не нужно видеть подробную информацию о процессе, а достаточно только PID, то можно использовать утилиту pgrep:
По умолчанию утилита ищет по командной строке запуска процесса, если нужно искать только по имени процесса, то надо указать опцию -f:
3. pidof
Эта утилита ищет PID конкретного процесса по его имени. Никаких вхождений, имя процесса должно только совпадать с искомым:
С помощью опции -s можно попросить утилиту выводить только один PID:
4. pstree
Утилита pstree позволяет посмотреть список дочерних процессов для определённого процесса, также их pid-идентификаторы. Например, посмотрим дерево процессов Apache:
Как узнать PID скрипта
Когда вы запускаете скрипт в оболочке, например Bash запускается процесс известный как подоболочка и выполняет последовательно все команды скрипта. Чтобы узнать PID процесса подоболочки Bash, запущенной для скрипта, обратитесь к специальной переменной $$. Эта переменная доступна только для чтения, поэтому вы не сможете ее редактировать:
#!/bin/bash
echo «PID этого скрипта: $$»
Каким процессом занят файл Linux
Выше мы рассмотрели, как получить PID процесса Linux по имени, а теперь давайте узнаем PID по файлу, который использует процесс. Например, мы хотим удалить какой-либо файл, а система нам сообщает, что он используется другим процессом.
С помощью утилиты lsof можно посмотреть, какие процессы используют директорию или файл в данный момент. Например, откроем аудио-файл в плеере totem, а затем посмотрим, какой процесс использует её файл:
В начале строки мы видим название программы, а дальше идёт её PID. Есть ещё одна утилита, которая позволяет выполнить подобную задачу — это fuser:
Здесь будет выведен только файл и PID процесса. После PID идёт одна буква, которая указывает, что делает этот процесс с файлом или папкой:
- c — текущая директория;
- r — корневая директория;
- f — файл открыт для чтения или записи;
- e — файл выполняется как программа;
- m — файл подключен в качестве библиотеки.
Кто использовал файл в Linux
Узнать процесс, который сейчас занимает файл, достаточно просто. Но как узнать, какой процесс обращается к файлу не надолго, например, выполняет его как программу или читает оттуда данные? Эта задача уже труднее, но вполне решаема с помощью подсистемы ядра auditd. В CentOS набор программ для работы с этой подсистемой поставляется по умолчанию, в Ubuntu же его придётся установить командой:
Теперь создаём правило для мониторинга. Например, отследим, кто запускает утилиту who:
auditctl -w /usr/bin/who -p x -k who_exec
Здесь -w — адрес файла, который мы будем отслеживать, —p — действие, которое нужно отслеживать, —k — произвольное имя для правила. В качестве действия могут использоваться такие варианты:
Теперь выполним один раз who и посмотрим, что происходит в логе с помощью команды ausearch:
sudo ausearch -i -k who_exec
Здесь в секции SYSCALL есть PID процесса, под которым была запущена программа, а также PPID — программа, которая запустила нашу who. Копируем этот PID и смотрим информацию о нём с помощью ps:
Становиться понятно, что это bash.
Какой процесс использует порт в Linux
Иногда необходимо узнать PID Linux-программы, которая использует сетевой порт, например 80. Для этого можно использовать утилиту ss:
Мы видим, что это несколько процессов Apache. Использовав опцию dport, можно узнать, какой процесс отправляет данные на указанный порт:
Выводы
В этой статье мы рассмотрели, как узнать PID процесса в Linux по различным условиям: имени или файлу. Как видите, всё достаточно просто, и в считанные минуты можно можно понять, что происходит с вашей операционной системой, и какой процесс за это отвечает.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.