Европейский Университет в Санкт-Петербурге
Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 1309 / 258 | Оценка: 4.34 / 3.65 | Длительность: 21:13:00
Лекция 9:

Управление процессами

Управление процессами

Команды наблюдения за процессами

Для просмотра текущего списка и состояния процессов следует использовать программу ps. Она выдает "мгновенный снимок" таблицы процессов, которые запущены в системе.

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

ps –ef

В системах BSD и System V программа ps имеет разные ключи, поэтому если вы переходите от одной системы к другой, надо помнить об этих различиях или обращаться к man ps.

Разберем подробнее, какую информацию выдает программа ps.

ps -ef | more

UID    PID  PPID  C STIME     TTY  TIME  CMD
root   0    0     0 17:43:30  ?    0:03  sched
root   1    0     0 17:43:30  ?    0:00  /etc/init -s
root   2    0     0 17:43:30  ?    0:00  pageout
root   3    0     0 17:43:30  ?    0:00  fsflush
root   349  1     0 17:43:53  ?    0:00  /usr/lib/saf/sac –t 300
root   277  276   0 17:43:49  ?    0:00  htt_server –port 9010
                                         –syslog -message_locale C
root   180  1     0 17:43:45  ?    0:00  /usr/lib/autofs/automountd
root   59   1     0 17:43:39  ?    0:00  /usr/lib/sysevent/syseventd
root   73   1     0 17:43:40  ?    0:00  /usr/lib/picl/picld
root   133  1     0 17:43:43  ?    0:00  /usr/sbin/rpcbind
root   229  1     0 17:43:48  ?    0:00  /usr/lib/power/powerd
root   172  1     0 17:43:44  ?    0:00  /usr/lib/nfs/lockd
root   156  1     0 17:43:44  ?    0:00  /usr/sbin/inetd -s
root   217  1     0 17:43:47  ?    0:00  /usr/lib/lpsched
daemon 168  1     0 17:43:44  ?    0:00  /usr/lib/nfs/statd
root   189  1     0 17:43:45  ?    0:00  /usr/sbin/syslogd
root   203  1     0 17:43:46  ?    0:00  /usr/sbin/cron
root   205  1     0 17:43:46  ?    0:00  /usr/sbin/nscd
root   343  1     0 17:43:53  ?    0:00  /usr/sbin/vold
root   240  1     0 17:43:48  ?    0:00  /usr/lib/utmpd
root   324  1     0 17:43:51  ?    0:00  /usr/lib/snmp/snmpdx –y –c
                                         /etc/snmp/conf     
root   261  1     0 17:43:49  ?    0:00  /usr/sadm/lib/smc/bin/smcboot
root   355  329   0 17:43:56  ?    0:00  /usr/dt/bin/dtlogin -daemon
root   329  1     0 17:43:52  ?    0:00  /usr/dt/bin/dtlogin -daemon
root   262  261   0 17:43:49  ?    0:00  /usr/sadm/lib/smc/bin/smcboot
root   263  261   0 17:43:49  ?    0:00  /usr/sadm/lib/smc/bin/smcboot
root   354  1     0 17:43:55  ?    0:00  /usr/lib/ssh/sshd
root   338  1     0 17:43:52  ?    0:00  /usr/lib/dmi/snmpXdmid -s sunny
root   352  349   0 17:43:53  ?    0:00  /usr/lib/saf/ttymon
root   353  329   2 17:43:54  ?    1:41  /usr/openwin/bin/Xsun :0
                                         –nobanner –auth     
                                         /var/dt/A:0-KtaiPa     
root   356  329   0 17:43:56  ?    0:00  /usr/openwin/bin/fbconsole –d :0
root   358  324   0 17:43:57  ?    0:00  mibiisa -r –p 5248
root   337  1     0 17:43:52  ?    0:00  /usr/lib/dmi/dmispd

Ниже мы описываем смысл колонок этого вывода. Некоторые колонки появятся только при использовании специфических ключей, отличных от ключей ef. Для получения еще более детальной информации следует обратиться к man ps.

UID – эффективный идентификатор владельца процесса (реальный выводится при использовании ключа –f ).

В колонке F – flags (флаги) – выводятся флаги процесса; это устаревшее поле, сохраненное для совместимости.

В колонке S – state (состояние) – указывается состояние процесса. Состояния бывают следующие:

  • O (ON PROC) – процесс находится в процессоре и выполняется;
  • S (Sleeping) – процесс ждет завершения события (например, ввода-вывода);
  • R (Runnable) – процесс готов к выполнению и ждет своего кванта в очереди к процессору;
  • Z (Zombie) – процесс стал "зомби", так как завершился, а родительский процесс не подождал его завершения;
  • T (sTopped) – процесс остановлен по сигналу остановки или в процессе трассировки.

Идентификатор PID – уникальный идентификатор процесса, используется при передаче ему сигналов.

PPIDидентификатор родительского процесса.

C – загрузка процессора на планирование задачи (устарело, выводится для совместимости).

CLSкласс планирования.

PRIприоритет процесса; когда указан ключ , б о льшие значения означают б о льший приоритет, без ключа –с б о льшие значения означают меньший приоритет.

NI – значение NICE (показателя уступчивости), используется при вычислении глобального приоритета процессов в классе разделения времени.

ADDR – адрес в памяти.

SZ – размер процесса в виртуальной памяти, включая все отображенные файлы и устройства, измеряется в страницах памяти; для получения размера в килобайтах в большинстве случаев это значение надо умножить на 4, точнее – см. команду pagesize.

WCHAN – адрес события, ради которого процесс перешел в состояние сна; если поле пусто – процесс запущен.

STIME – время запуска процесса, в часах, минутах и секундах; для запущенных более суток назад процессов указываются месяцы и дни.

TTY – управляющий терминал (то же, что и терминальная группа), символ вопросительного знака "?" печатается для процесса без управляющего терминала.

TIME – сколько времени процесс отнял у процессора.

CMD – команда, которой был запущен процесс.

При указании ключа j выводятся дополнительные сведения:

  • PGID – идентификатор лидера группы процессов;
  • SIDидентификатор процесса – лидера сессии.

При указании ключа L выводятся дополнительные сведения, причем информация выдается по одной строке на каждый легковесный процесс. Обычные однопоточные процессы соотносятся только с одним легковесным процессом:

  • LWP – идентификатор легковесного процесса;
  • NLWP – число легковесных процессов для процесса.

Процессы, которые завершились, но чей код заверешния не был востребован родительским процессом, помечаются как <defunct>.

Кроме программы ps в UNIX для получения информации о запущенных в данный момент процессах широко используется команда top:

top
last pid: 923;     load averages:  4.56,     1.18,     0.50  17:54:22
64 processes:   63 sleeping, 1 on cpu
CPU states: 0.0% idle, 0.5% user, 99.5% kernel, 0.0% iowait, 0.0% swap
Memory: 128M real, 18M free, 101M swap in use, 499M swap free
PID USERNAME LWP PRI NICE  SIZE    RES  STATE  TIME    CPU  COMMAND
909 root     1   60  0      17M  3340K  sleep  0:00  0.92%  pagein
353 root     1   58  0      32M    16M  sleep  0:05  0.37%  Xsun
893 root     1   49  0    2228K  1172K  cpu    0:00  0.15%  top
753 root     1   49  0      15M  8112K  sleep  0:00  0.13%  dtterm
911 root     1   59  0    3352K   752K  sleep  0:00  0.03%  sh
912 root     1   49  0    3360K   600K  sleep  0:00  0.03%  sh
894 root     1   59  0    3064K  1816K  sleep  0:00  0.03%  dtexec
656 root     5   59  0      22M    10M  sleep  0:01  0.02%  dtwm
648 root     1   59  0    6644K  2280K  sleep  0:00  0.02%  ttsession
667 root     1   59  0    1844K   512K  sleep  0:00  0.02%  rpc.rstatd
277 root     29  59  0    5612K  1724K  sleep  0:00  0.01%  htt_server
895 root     1   59  0    3360K   756K  sleep  0:00  0.01%  soffice
720 root     4   49  0      42M    26M  sleep  0:03  0.00%  mozilla-bin
649 root     1   49  0      18M  6288K  sleep  0:00  0.00%  dtsession
760 root     1   49  0    4752K  1656K  sleep  0:00  0.00%  bash

В Solaris вместо команды top принято использовать похожую по функциональности команду prstat.

Кроме этого, в Solaris для удобства получения информации о процессах с определенными именами есть команда

pgrep имя

Она является эквивалентом команды

ps –ef | grep имя

С помощью pargs можно посмотреть, какие аргументы переданы конкретному процессу и какая у него среда окружения:

pargs 2793
2793:    dtterm -name Run -xrm *menuBar: False -iconic -map -e /usr/dt/
bin/dtexec -open
argv[0]: dtterm
argv[1]: -e
argv[2]: /usr/dt/bin/dtexec
argv[3]: -open
argv[4]: -1
argv[5]: -ttprocid
argv[6]: 2.10fX-r 01 648 1289637086 1 1 0 192.168.5.33 5 sunny_105_1
argv[7]: /export/home/mozilla_bin/sfw/bin/mozilla
argv[8]: <NULL>
argv[9]: -open
argv[10]: -1
argv[11]: -ttprocid
argv[12]: 2.10fX-r 01 648 1289637086 1 1 0 192.168.5.33 5 sunny_105_1
argv[13]: /export/home/mozilla_bin/sfw/bin/mozilla

pargs -e 2793
2793:    dtterm -name Run -xrm *menuBar: False -iconic -map -e /usr/dt/
bin/dtexec -open
envp[0]: AB_CARDCATALOG=/usr/dt/share/answerbooks/ru_RU.UTF-8/
ab_cardcatalog
envp[1]: DISPLAY=:0.0
envp[2]: DTAPPSEARCHPATH=//.dt/appmanager:/etc/dt/appconfig/
appmanager/%L:/etc/dt/appconfig/appmanager/C:/usr/dt/appconfig/
appmanager/%L:/usr/dt/appconfig/appmanager/C
envp[3]: DTDATABASESEARCHPATH=//.dt/types,/etc/dt/appconfig/types/%L,/
etc/dt/appconfig/types/C,/usr/dt/appconfig/types/%L,/usr/dt/appconfig/
types/C

Вывод команды pargs значительно сокращен, ключ –e требует вывести все содержимое среды окружения, а для графических программ типа dtterm, как в нашем примере, среда окружения весьма велика.

Команда prstat позволяет в динамике, подобно команде top, отслеживать состояние процессов:

prstat

PID  USERNAME SIZE   RSS  STATE  PRI NICE  TIME    CPU   PROCESS/NLWP
3576 root    3412K  868K  run    13   0   0:00:02  6,3%  find/1
353  root      45M   19M  sleep  59   0   0:02:30  0,2%  Xsun/1
753  root      15M 3620K  run    49   0   0:00:02  0,1%  dtterm/1
3577 root    6640K 4108K  cpu0   49   0   0:00:00  0,1%  prstat/1
205  root    2872K  624K  sleep  59   0   0:00:00  0,0%  nscd/18
895  root     123M   21M  sleep  49   0   0:00:49  0,0%  soffice.bin/4
667  root    1844K  488K  sleep  59   0   0:00:00  0,0%  rpc.rstatd/1
217  root    5364K  536K  sleep  59   0   0:00:00  0,0%  lpsched/1
324  root    4360K  196K  sleep  59   0   0:00:00  0,0%  snmpdx/1
240  root    1100K  288K  sleep  59   0   0:00:00  0,0%  utmpd/1
343  root    4892K    0K  sleep  59   0   0:00:00  0,0%  vold/3
276  root    3240K    0K  sleep  59   0   0:00:00  0,0%  htt/1
633  root    3784K    0K  sleep  59   0   0:00:00  0,0%  sdt_shell/1
657  root      16M 2496K  sleep  49   0   0:00:00  0,0%  dtfile/1
203  root    4484K  568K  sleep  59   0   0:00:00  0,0%  cron/1
189  root    5636K 1092K  sleep  59   0   0:00:00  0,0%  syslogd/13
168  daemon  2444K  820K  sleep  59   0   0:00:00  0,0%  statd/1
156  root    2412K  688K  sleep  59   0   0:00:00  0,0%  inetd/1
172  root    2160K  748K  sleep  59   0   0:00:00  0,0%  lockd/2
229  root    1348K    0K  sleep  59   0   0:00:00  0,0%  powerd/2
133  root    2212K  604K  sleep  59   0   0:00:00  0,0%  rpcbind/1
Total: 61 processes, 161 lwps, load averages: 0,25, 0,17, 0,27

Вы можете получить информацию только о тех процессах, которые запущены вами. Пользователь root может получть информацию о любых процессах.

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Александр Васильченко
Александр Васильченко
Россия
Денис Гайдуль
Денис Гайдуль
Россия, Подольск