Linux: описание и полезные опции process status

Автор: | 03/23/2015
 

linux_logoProcess status (ps) в любой UNIX-like системе — одна из наиболее используемых команд.

Она используется для отображения всех запущенных в системе процессов, и информации о них — используемая память, процессорное время, PID/PPID, пользователь и другое.

Будучи запущенной без опций — она выведет минимальное количество информации:

# ps
PID TTY TIME CMD
  2166 pts/3 00:00:00 ps
  3520 pts/3 00:00:00 sudo
  3521 pts/3 00:00:00 bash

Уточнение по использованию опций:

  • UNIX/POSIX опции, могут быть сгруппированы и перед ними должен быть указан дефис («-«);
  • BSD опции, могут быть сгруппированы и перед ними НЕ должно быть дефиса;
  • GNU длинные опции, перед которыми указывается два дефиса («—«).

Далее тут будут в основном использоваться UNIX-опции.

Что бы получить больше информации — используйте опции -e (everything) и -f (full information):

# ps -ef | head -n 5
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2014 ? 01:59:25 /sbin/init
root 2 0 0 2014 ? 00:00:00 [kthreadd]
root 3 2 0 2014 ? 08:24:39 [migration/0]
root 4 2 0 2014 ? 01:13:20 [ksoftirqd/0]

Колонки при использовании опции -f:

Колонка Значение
UID владелец процесса
PID Process ID
PPID PID родительского процесса
C % времени CPU, затраченного на обработку запросов этого процесса с момента его запуска
STIME время (и дата, если не сегодня), когда процесс был запущен
TTY связанный с процессом терминал
TIME общее время затраченное процессором на обработку запросов процесса с момента его запуска
CMD команда и рагменты для запуска процесса

Кроме -ef ps принимает многие другие опции.

Например, что бы вывести процессы определённого пользователя — испольуйте -u:

# ps -fu oracle | head -n 5
UID PID PPID C STIME TTY TIME CMD
oracle 303 1 0 11:41 ? 00:00:00 oracleKIEVLMS (LOCAL=NO)
oracle 330 1 0 11:42 ? 00:00:02 oracleKIEVLMS (LOCAL=NO)
oracle 1144 1 1 12:10 ? 00:00:40 oracleKIEVLMS (LOCAL=NO)
oracle 1201 1 0 Mar19 ? 00:00:05 oracleKIEVLMS (LOCAL=NO)

Что бы отобразить иерархию процессов — используйте -H:

# ps -fHu root | head -n 10
UID        PID  PPID  C STIME TTY          TIME CMD
root     28101  3476  0 Jan06 pts/4    00:00:00 sudo -s
root     28104 28101  0 Jan06 pts/4    00:00:00   /bin/bash
root      3520  3462  0  2014 pts/3    00:00:00 sudo -s
root      3521  3520  0  2014 pts/3    00:00:00   /bin/bash
root      3471  3521  1 13:19 pts/3    00:00:00     ps -fHu root
root      3472  3521  0 13:19 pts/3    00:00:00     head -n 10
root      3540  3448  0  2014 pts/2    00:00:00 sudo -s
root      3541  3540  0  2014 pts/2    00:00:00   /bin/bash
root      1589  3541  2 12:21 pts/2    00:01:34     htop

Что бы отобразить информацию о конкретном процессе — опция -p <PID>:

# ps -fp 32709
UID PID PPID C STIME TTY TIME CMD
oracle 32709 1 50 11:40 ? 00:53:03 oracleKIEVLMS (LOCAL=NO)

Отобразить все процессы, в именах которых присутвует oracle:

# ps -fC oracle | head -n 5
UID PID PPID C STIME TTY TIME CMD
oracle 303 1 0 11:41 ? 00:00:00 oracleKIEVLMS (LOCAL=NO)
oracle 330 1 0 11:42 ? 00:00:02 oracleKIEVLMS (LOCAL=NO)
oracle 1144 1 1 12:10 ? 00:01:01 oracleKIEVLMS (LOCAL=NO)
oracle 1201 1 0 Mar19 ? 00:00:05 oracleKIEVLMS (LOCAL=NO)

Отобразить информацию о потоках (или Lightweight процессах):

# ps -efL | head
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 1 0 1 0 1 2014 ? 01:59:25 /sbin/init
root 2 0 2 0 1 2014 ? 00:00:00 [kthreadd]
root 3 2 3 0 1 2014 ? 08:24:40 [migration/0]
root 4 2 4 0 1 2014 ? 01:13:21 [ksoftirqd/0]
root 5 2 5 0 1 2014 ? 00:00:00 [migration/0]
root 6 2 6 0 1 2014 ? 01:55:28 [watchdog/0]
root 7 2 7 0 1 2014 ? 07:56:34 [migration/1]
root 8 2 8 0 1 2014 ? 00:00:00 [migration/1]
root 9 2 9 0 1 2014 ? 01:14:11 [ksoftirqd/1]

Одна из наиболее приятных возможностей ps — форматирование и выбор того, что будет отображено с помощью опции -o.

Например, что вывести только PID и имя процесса:

# ps efo pid,comm
  PID COMMAND
28101 sudo
28104  _ bash
 3520 sudo
 3521  _ bash
 4069      _ ps
 3540 sudo
 3541  _ bash
 1589      _ htop
 2419 bash
 1363 mingetty
 1361 mingetty

Аргументов для выбора данных очень много, перечислю основные:

Опция Алиас Описание
%cpu pcpu использование CPU процессом; считается как CPU time (cputime, см. ниже) / время работы процесса
%mem pmem % RES памяти (resident memory) процесса от общей физической памяти
args cmd, command команда со всеми аргументами
comm ucmd, ucomm только команда
cputime time CPU time (сумарное время, затраченное процессором на обработку процессов user, system, без учёта времени iowait, idle и прочее)
pid, gid PID и GID процесса
lwp spid, tid Light-weight process (LWP) ID (thread ID)
rss rssize, rsz resident set size — занятая физическая память без swap-а в KiB
start время запуска процесса (если менее, чем 24 тому — то в виде Часы:Минуты:Секунды, иначе — Мес:День)
user euser, uname владелец процесса
vsize vsz virtual memory size в KiB

Вывод можно грепать и сортировать, например:

# ps axo pid,psr,pcpu,comm | grep oracle | sort -r -k3,3 | head -n 10
32709 3 65.8 oracle
5429 1 3.8 oracle
1993 2 3.3 oracle
27499 3 3.1 oracle
22582 0 2.7 oracle
6127 3 2.3 oracle
3874 1 2.2 oracle
4117 0 1.2 oracle
5469 1 1.1 oracle
5477 2 1.0 oracle

Лучшая ссылка по теме — http://www.computerhope.com.