Ps

Программа ps выводит список процессов системы.

ps [параметры]

Если программу запустить без параметров, будет показан список процессов выполняемых текущим пользователем на текущем терминале.

$ ps
  PID TTY          TIME CMD
 4141 pts/2    00:00:00 bash
 4217 pts/2    00:00:00 ps
$

Ниже показаны поля, которые вывела программа.

  • PID — PID процесса.
  • TTY — терминал, к которому подключен процесс. То есть тот терминал, к которому подключены стандартный ввод, вывод и вывод ошибки программы. Иногда эти терминалы называют управляющими терминалами.
  • TIME — время выполнение программы. То есть то время, которое реально тратит на выполнение программы процессор.
  • CMD — имя, с которым была запущена программа. В Linux одну программу можно запускать под разными именами (для этого используют ссылки: жесткие и символьные).

Любой пользователь может получить список всех процессов выполняемых в системе. Для этого можно использовать параметр –e.

$ ps -e
  PID TTY          TIME CMD
    1 ?        00:00:00 init
    2 ?        00:00:00 ksoftirqd/0
    3 ?        00:00:00 events/0
    4 ?        00:00:00 khelper
    5 ?        00:00:00 kthread
    7 ?        00:00:00 kacpid
  100 ?        00:00:00 kblockd/0
  143 ?        00:00:00 pdflush
  144 ?        00:00:00 pdflush
......
 4197 pts/4    00:00:00 sh
 4202 pts/4    00:00:00 most
 4224 ?        00:00:00 kio_file
 4225 pts/2    00:00:00 ps
$

Обратите внимание на второй столбец TTY — это терминал, к которому подключены стандартный ввод, вывод и вывод ошибки данного процесса. Если в этом поле стоит знак вопроса — значит процесс не подключён к конкретному терминалу.

В примере показан не полный вывод программы ps, уж слишком большой он получился. Если Вы хотите посчитать количество процессов, это можно сделать например так:

$ ps -e | sed -e '1d' | wc -l
75
$

В этом примере sed удаляет первую строку содержащую заголовок, остается только список процессов. А программа wc считает их количество.

Если необходимо посмотреть процессы определенного пользователя, используйте параметр –u. Ниже показано как посмотреть процессы, выполняемые с правами пользователя daemon.

$ ps -u daemon
  PID TTY          TIME CMD
 3678 ?        00:00:00 named
 3712 ?        00:00:00 atd
$

Параметр –t позволяет посмотреть процессы, подключенные к определенному терминалу. Например, так можно посмотреть процессы, выполняемые на терминале pts/4:

$ ps -t pts/4
  PID TTY          TIME CMD
 4167 pts/4    00:00:00 bash
 4193 pts/4    00:00:00 man
 4196 pts/4    00:00:00 sh
 4197 pts/4    00:00:00 sh
 4202 pts/4    00:00:00 most
$

Если Вы хотите решать какие поля должна выводить программа ps, используйте параметр –o. Параметр требует указание дополнительных опций. Ниже приведены некоторые из них.

  • args — показывать имя программы и аргументы командной строки, переданные программе при ее запуске. Заголовок поля: COMMAND.
  • comm — имя программы. Заголовок поля: COMMAND.
  • time — время, которое тратит процессор на выполнение программы. Заголовок поля: TIME.
  • etime — время, прошедшее с момента запуска программы. Заголовок поля: ELAPSED.
  • ni — значение nice. Заголовок поля: NI.
  • pid — PID процесса. Заголовок поля: PID.
  • ppid — PID родительского процесса. Заголовок поля: PPID.
  • s — состояние процесса. Заголовок поля: S.
  • start — время, когда программа была запущена на выполнение. Заголовок поля: STARTED.
  • tty — терминал, к которому подключен процесс. Заголовок поля: TTY.

Например, необходимо посмотреть список всех процессов системы с указание PID, PPID, терминала и имени программы. Тогда ps должна быть запущена со следующими аргументами:

$ ps -eo pid,ppid,tty,comm
  PID  PPID TT       COMMAND
    1     0 ?        init
    2     1 ?        ksoftirqd/0
    3     1 ?        events/0
    4     1 ?        khelper
    5     1 ?        kthread
    7     5 ?        kacpid
  100     5 ?        kblockd/0
  143     5 ?        pdflush
......
 4266  4265 pts/2    sh
 4271  4266 pts/2    most
 4329  3994 ?        kio_file
 4332  4154 pts/3    ps
$

Администраторы используют программу ps в основном для того, что бы узнать работает ли интересующий его процесс. И если он работает, то с каким PID он выполняется. Например, необходимо узнать работает ли почтовый сервер sendmail и если он работает, то какие конкретные процессы и с каким PID сейчас находятся в системе. Для выяснения этой информации воспользуемся программами ps и grep:

$ ps -e | grep sendmail
 3527 ?        00:00:00 sendmail
 3530 ?        00:00:00 sendmail
$

Еще одна программа, которая может помочь в решении этой задачи — это pgrep.