Process 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 |
|
% 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.