Управление процессами
Управление процессами
Команды наблюдения за процессами
Для просмотра текущего списка и состояния процессов следует использовать программу 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Пример 7.4. Результат работы программы ps
Ниже мы описываем смысл колонок этого вывода. Некоторые колонки появятся только при использовании специфических ключей, отличных от ключей ef. Для получения еще более детальной информации следует обратиться к man ps.
UID - эффективный идентификатор владельца процесса (реальный выводится при использовании ключа -f ).
В колонке F - flags (флаги) - выводятся флаги процесса, это устаревшее поле, сохраненное для совместимости.
В колонке S - state (состояние) - указывается состояние процесса. Состояния бывают следующие:
- O (ON PROC) - процесс находится в процессоре и выполняется;
- S (Sleeping) - процесс ждет завершения события (например, ввода-вывода);
- R (Runnable) - процесс готов к выполнению и ждет своего кванта в очереди к процессору;
- Z (Zombie) - процесс стал <зомби>, так как завершился, а родительский процесс не подождал его завершения;
- T (sTopped) - процесс остановлен по сигналу остановки или в процессе трассировки.
Идентификатор PID - уникальный идентификатор процесса, используется при передаче ему сигналов.
PPID - идентификатор родительского процесса.
C - загрузка процессора на планирование задачи (устарело, выводится для совместимости).
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Пример 7.5. Результат работы команды top
В 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Пример 7.6. Результат работы программы pargs
Вывод команды 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Пример 7.7. Результат работы программы prstat
Вы можете получить информацию только о тех процессах, которые запущены вами. Пользователю root доступна информация о любых процессах.
Процессы-зомби
В Solaris 9 появилась новая программа preap, которая позволяет убрать из системы "мнимые" (defunct), не до конца завершившиеся процессы, которые также носят название "зомби" (zombie). Эти процессы совершенно безобидны, так как это - самые обыкновенные процессы, код завершения которых не был принят родительскими процессами (например, в результате преждевременного завершения родительского процесса или иного сбоя). Несмотря на безобидность, они могут попусту занимать ресурсы системы, если таких процессов будет много. Обычно процессы-зомби автоматически уничтожаются процессом init, но если этого почему-либо не произошло, можно воспользоваться программой preap, которая примет код завершения процесса-зомби и даст ему упокоиться с миром.