Как найти запущенный процесс в Linux?

Ответ

В Linux есть несколько основных команд для поиска запущенных процессов.

1. Использование ps и grep (классический способ):

# Поиск по имени процесса
ps aux | grep nginx
# Более точный поиск (исключает сам процесс grep)
ps aux | grep -v grep | grep nginx

2. Использование pgrep (более удобная альтернатива):

# Найти PID процесса по имени
pgrep nginx
# Найти PID и полную командную строку
pgrep -af nginx

3. Использование pidof (для поиска по точному имени исполняемого файла):

pidof nginx

4. Поиск процесса, использующего определённый порт:

# Использование lsof
sudo lsof -i :80
# Использование ss или netstat
sudo ss -ltnp | grep :80
sudo netstat -tulpn | grep :80

5. Интерактивные мониторы процессов:

top        # Базовый монитор
htop       # Улучшенный, с поддержкой мыши и цветов
btop / btm # Современные мониторы с графиками

6. Поиск по пользователю:

ps -u username

Практический пример из DevOps-практики: Допустим, служба не отвечает на порту 8080.

# 1. Проверяем, слушает ли кто-то порт
sudo lsof -i :8080
# 2. Если процесс найден (например, PID 12345), смотрим о нём детальную информацию
ps -fp 12345
# 3. Или смотрим его открытые файлы и сокеты
ls -la /proc/12345/fd/

Ключевые опции:

  • ps aux — показать все процессы всех пользователей в детализированном формате.
  • pgrep -f — искать по полной командной строке, а не только по имени исполняемого файла.
  • lsof -i — показать процессы, использующие сетевые соединения.

Ответ 18+ 🔞

Ага, слушай, вот ты сидишь, а у тебя какой-то процесс на сервере творится непонятная дичь — то ли висит, то ли сдох, то ли порт занял и молчит как партизан. Ну, ёпта, с чего начать-то? Давай по порядку, как нормальные люди.

1. Старый добрый ps с grep — классика, которую все знают, но вечно путают.

# Ищешь, скажем, nginx
ps aux | grep nginx

Но тут же, бля, подстава: в выводе будет и сам твой grep nginx болтаться, манда с ушами! Чтобы его убрать, делают так:

ps aux | grep -v grep | grep nginx

Вот это уже чище. Но способ, честно, для дедов. Работает — да, но есть варианты поприятнее.

2. pgrep — вот это уже инструмент для умных. Создали же его не просто так.

# Просто найдет все PID'ы по имени
pgrep nginx
# А если хочешь не только номер, но и увидеть, что это за команда была (а то мало ли, одно имя, а запусков — овердохуища)
pgrep -af nginx

Вот это уже, бля, удобно. Прямо создан для таких ленивых, как мы.

3. pidof — ещё один узкий специалист.

pidof nginx

Ищет строго по имени исполняемого файла. Быстрый, простой. Если знаешь точно, что ищешь — в самый раз.

4. А вот это, чувак, самый частый кейс: «Какого хуя порт 8080 занят? Кто его съел?». Тут два главных подозреваемых:

# lsof — мощная штука, показывает кто что открыл
sudo lsof -i :80

Или старички ss с netstat (последний уже не везде стоит, его ss вытесняет):

sudo ss -ltnp | grep :80
sudo netstat -tulpn | grep :80  # если ещё жив, этот старичок

Вот тут главное — смотреть столбец PID/Process. Нашёл — и уже полдела сделано.

5. Ну а если вообще непонятно, что творится в системе — включаем тяжёлую артиллерию: мониторы.

top        # База. Есть везде. Скучновато, но работает.
htop       # Вот это любовь! Цвета, мышь, деревья процессов. Красота.
btop / btm # Современные штуки, с графиками ресурсов. Выглядит, будто с космического корабля панель.

Запустил htop, нажал F4, вбил имя процесса — и вот он, красавец, сразу видно, сколько памяти жрёт, этот хитрожопый.

6. Ну и поиск по юзеру — тоже пригождается.

ps -u deploy

Смотришь и думаешь: «И что это наш деплой-пользователь тут такого наворотил?».

Вот тебе реальный пример из жизни, когда всё пошло по пизде: Допустим, твой сервис на 8080 порту не отвечает. Делаем так:

# 1. Сначала смотрим — а есть ли кто вообще на том конце провода?
sudo lsof -i :8080
# 2. Допустим, нашёл процесс с PID 12345. Теперь смотришь на него пристальнее:
ps -fp 12345
# 3. А если совсем паранойя, можно глянуть, какие файлы и сокеты он держит открытыми:
ls -la /proc/12345/fd/

Часто вот в этом /proc/PID/fd/ и кроется ответ, куда процесс упёрся и почему не может стартануть.

Запомни ключевые флаги, чтобы не выглядеть распиздяем:

  • ps aux — это наш «швейцарский нож», показывает ВСЁ, что шевелится.
  • pgrep -f — ищет не только по имени бинарника, а по всей командной строке. Очень помогает, когда скрипт на питоне или джаве запущен.
  • lsof -i — твой лучший друг в расследовании сетевых косяков. Кто, куда и через какой порт говорит.

В общем, инструментов — вагон. Главное — понять, что именно тебе нужно: просто найти PID, посмотреть, кто порт занял, или устроить полную разборку полётов всему серверу. Выбирай по ситуации и не паникуй.