Как посмотреть список запущенных процессов в системе
Что проверяют
Базовую уверенность в Linux: умеете ли вы не просто вывести список, а найти в нём нужное и прочитать состояние процесса. Следом обычно спрашивают про зомби-процессы, про поиск процесса по порту и про то, как всё это выглядит в контейнере.
Как отвечать
ps auxилиps -ef: снимок всех процессов. Первый вариант показывает %CPU, %MEM, RSS и STAT, второй даёт PPID, по которому видно родителя;ps -eo pid,ppid,user,%cpu,%mem,stat,cmd --sort=-%cpu | head: свои колонки и сортировка, самый полезный вариант на практике;topиhtop: живая картина. Вtopсортировка по памяти включается клавишейM, по CPU клавишейP;pgrep -a nginxиps -u deploy: поиск по имени и по пользователю без конвейера черезgrep;pstree -p: дерево процессов, видно, кто кого породил;ss -tlnp: какой процесс слушает порт, альтернативаlsof -i :8080;/proc/<pid>/: всё о процессе напрямую, от командной строки до лимитов и открытых файлов.
Колонку STAT стоит уметь читать: R выполняется, S спит, D в непрерываемом ожидании (обычно диск или NFS), Z зомби, T остановлен. Сервисы под systemd удобнее смотреть через systemctl status и systemd-cgls, там процессы сгруппированы по юнитам.
В контейнерах docker top <контейнер> покажет процессы изнутри, а на хосте их видно обычным ps, только с другими PID. В Kubernetes kubectl top pod даёт потребление ресурсов, а за списком процессов идут через kubectl exec или эфемерный контейнер kubectl debug.
Где спотыкаются
Пишут ps aux | grep nginx и не замечают, что в выводе есть сам grep. В скрипте это ложное срабатывание, правильнее pgrep.
Пытаются убить зомби через kill -9. Зомби уже завершился и лишь ждёт, пока родитель прочитает код выхода. Разбираться нужно с родителем.
Принимают процессы в состоянии D за нагрузку на CPU. Сигналом их не снять, и именно они поднимают load average при почти пустом процессоре.