Команда ps (от англ. process status) — это утилита в Linux, которая отображает информацию о текущих запущенных процессах в системе. Она считывает данные из файловой системы /proc и предоставляет моментальный снимок состояния процессов. Для системных администраторов понимание и умение эффективно использовать команду ps является ключевым навыком для мониторинга и управления системой.
В этой статье мы рассмотрим 30 примеров использования команды ps, снабдив каждый детальным описанием действий команды, объяснением используемых опций и практическими примерами. Это поможет глубже понять, как работают процессы в Linux, и как можно контролировать и оптимизировать их работу.
1. Отображение процессов текущей сессии
Команда:
ps
Данная команда без аргументов показывает процессы, связанные с вашей текущей сессией терминала. Вывод включает процессы, запущенные в текущем терминале, и отображает столбцы:
- PID: идентификатор процесса.
- TTY: терминал, к которому привязан процесс.
- TIME: суммарное время процессорного времени, потребленного процессом.
- CMD: команда, запустившая процесс.
Пример вывода:
2. Вывод всех активных процессов в системе
Команда:
ps -e
# или
ps -A
Опции -e или -A выводят информацию обо всех процессах, запущенных в системе, независимо от того, каким пользователем или в каком терминале они были запущены.
Пример вывода:
3. Подробный вывод всех процессов
Команда:
ps -ef
Опция -f (full-format) расширяет вывод, добавляя дополнительную информацию:
- UID: пользователь, запустивший процесс.
- PPID: идентификатор родительского процесса.
- C: использование процессора.
- STIME: время запуска процесса.
- TTY, TIME, CMD: как и ранее.
Пример вывода:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:00 ? 00:00:05 /sbin/init
root 2 0 0 10:00 ? 00:00:00 [kthreadd]
root 3 2 0 10:00 ? 00:00:00 [rcu_gp]
4. Отображение процессов в формате BSD
Команда:
ps aux
Комбинация опций:
- a: отображает процессы всех пользователей.
- u: выводит информацию в удобочитаемом формате с указанием пользователя и использования ресурсов.
- x: включает процессы, не привязанные к терминалу (например, демоны).
Пример вывода:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 167244 6208 ? Ss 10:00 0:05 /sbin/init
root 2 0.0 0.0 0 0 ? S 10:00 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 10:00 0:00 [rcu_gp]
5. Фильтрация процессов по имени пользователя
Команда:
ps -u username
Опция -u позволяет отобразить процессы, запущенные конкретным пользователем. Замените username на имя пользователя, чьи процессы вы хотите увидеть.
Пример:
ps -u alice
Пример вывода:
PID TTY TIME CMD
4567 pts/1 00:00:00 bash
5678 pts/1 00:00:01 python
6789 pts/1 00:00:00 ps
6. Фильтрация процессов по UID
Команда:
ps -u 1000
Если вы знаете UID пользователя (например, 1000), можно использовать его вместо имени. Это полезно в скриптах или системах, где важно использовать числовые идентификаторы.
7. Отображение процессов без контролирующего терминала
Команда:
ps -x
Опция x выводит процессы, не связанные с терминалом. Такие процессы обычно являются фоновыми службами или демонами.
Пример вывода:
PID TTY STAT TIME COMMAND
567 ? Ss 0:00 /usr/sbin/cron
678 ? Ss 0:02 /usr/bin/dbus-daemon --system
789 ? Ssl 0:05 /usr/lib/policykit-1/polkitd
8. Комбинированное использование опций для расширенного вывода
Команда:
ps aux
Объединяя опции a, u и x, мы получаем полный список всех процессов всех пользователей в удобочитаемом формате, включая фоновые процессы.
9. Фильтрация процессов по имени команды
Команда:
ps -C sshd
Опция -C позволяет отобразить процессы, запущенные определенной командой. В данном случае выводятся все процессы sshd.
Пример вывода:
PID TTY STAT TIME COMMAND
1234 ? Ss 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
2345 ? S 0:00 sshd: user@pts/0
10. Использование grep для поиска процессов
Команда:
ps -ef | grep nginx
Это позволяет найти все процессы, связанные с nginx. Чтобы избежать вывода самого процесса grep:
ps -ef | grep '[n]ginx'
Скобки создают регулярное выражение, которое соответствует nginx, но не grep nginx.
В первых 15 примерах использования команды ps мы рассмотрели базовые и продвинутые техники отображения информации о процессах в Linux. Мы научились фильтровать процессы по различным критериям, отображать детальную информацию, использовать пользовательские форматы вывода и визуализировать иерархию процессов. Эти знания являются фундаментальными для эффективного мониторинга и управления системой.
Понимание того, как процессы взаимодействуют между собой, как они потребляют ресурсы и как их идентифицировать, позволяет системному администратору оперативно реагировать на возникающие проблемы, оптимизировать производительность и обеспечивать стабильную работу сервера или рабочей станции.