[ Содержание ]
Программа 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.
[ Содержание ]