s
Итак, вы знаете, как переключаться между запущенными вами из командной строки фоновыми процессами. Так же вы знаете, что есть ещё много других процессов, которые всё время выполняются. Как же посмотреть их список? Вам надо воспользоваться ps(1) командой. У неё есть множество различных опций, здесь будут описаны лишь самые основные. Для подробной информации смотрите man страницу для ps. Man страницы описаны в разделе 2.2.1.
Простой набор ps выдаст список программ, выполняемых на терминале. Довольно часто этот список будет невелик:
$ ps |
PID | TTY | TIME | CMD |
7923 | ttyp0 | 00:00:00 | bash |
8059 | ttyp0 | 00:00:00 | ps |
Не смотря на то, что процессов немного, информация довольно типичная. Сколько бы у вас не было процессов, при простом использовании ps столбцы будут теми же. Что же означает вся эта информация?
Итак, по порядку: PID это идентификационный номер (ID) процесса. Каждый выполняющийся процесс получает уникальный идентификатор. В 2.2.х ядрах ID процессов может быть любым числом от 1 и до 32767. Каждому процессу присваивается следующий свободный PID. Когда процесс завершается, его номер освобождается. Когда достигнут максимальный PID, следующий свободный будет взят из наименьшего освобождённого. Скорее всего, это изменится в ядре 2.4, и будут представлены новые 32-х битовые PID.
TTY столбец показывает, на каком терминале процесс выполняется. Простое выполнение ps покажет процессы выполняемые на текущем терминале, так что для всех процессов будет выведена идентичная информация в TTY столбце. Как видно из примера, оба показанных процесса выполняются на терминале ttyp0. Это говорит нам о том, что эти процессы запущены либо удалённо, либо из какого-то X терминала.
Столбец TIME показывает, сколько процессорного времени выполняется процесс. Оно не является фактическим временем, с момента запуска процесса. Помните, что Linux это многозадачная операционная система. В любой момент времени есть несколько выполняемых процессов, и каждый из этих процессов получает небольшую порцию процессорного времени. Так вот, информация указанная в столбце TIME, показывает время, которое гораздо меньше фактического времени выполнения процесса. Если вы это время больше, чем несколько минут у одного из процессов, то скорее всего, что-то не так.
Ну и наконец, CMD столбец, показывает что же это за программа. Отображается только имя программы; опции командной строки и аналогичная информация не выводится. Для того чтобы увидеть эту информацию, вам необходимо воспользоваться одной из многих опций программы ps. Давайте обсудим некоторые из них вкратце.
Вы можете получить полный список выполняемых в вашей системе процессов, воспользовавшись правильным набором опций. Скорее вы захотите вывести расширенный список процессов. Давайте попробуем:
$ ps -ax |
PID | TTY | STAT | TIME | COMMAND |
1 | ? | S | 0:03 | init [3] |
2 | ? | SW | 0:13 | [kflushd] |
3 | ? | SW | 0:14 | [kupdate] |
4 | ? | SW | 0:00 | [kpiod] |
5 | ? | SW | 0:17 | [kswapd] |
11 | ? | S | 0:00 | /sbin/kerneld |
30 | ? | SW | 0:01 | [cardmgr] |
50 | ? | S | 0:00 | /sbin/rpc.portmap |
54 | ? | S | 0:00 | /usr/sbin/syslogd |
57 | ? | S | 0:00 | /usr/sbin/klogd -c 3 |
59 | ? | S | 0:00 | /usr/sbin/inetd |
61 | ? | S | 0:04 | /usr/local/sbin/sshd |
63 | ? | S | 0:00 | /usr/sbin/rpc.mountd |
65 | ? | S | 0:00 | /usr/sbin/rpc.nfsd |
67 | ? | S | 0:00 | /usr/sbin/crond -l10 |
69 | ? | S | 0:00 | /usr/sbin/atd -b 15 -l 1 |
77 | ? | S | 0:00 | /usr/sbin/apmd |
79 | ? | S | 0:01 | gpm -m /dev/mouse -t ps2 |
94 | ? | S | 0:00 | /usr/sbin/automount /auto file /etc/auto.misc |
106 | tty1 | S | 0:08 | -bash |
108 | tty3 | SW | 0:00 | [agetty] |
109 | tty4 | SW | 0:00 | [agetty] |
110 | tty5 | SW | 0:00 | [agetty] |
111 | tty6 | SW | 0:00 | [agetty] |
(output cut) |
Наверное вам сразу бросится в глаза, что большинство из процессов выполняются на tty ''?''. Это процессы, запущенные с более не активного терминала. И поэтому они больше не принадлежат определённому терминалу.
Так же вы видите новый столбец: STAT. Он показывает состояние (status) процесса. S используется для спящего (sleeping) процесса: процесс ожидает, пока что-то произойдёт. Z используется для зомбиованных процессов (zombied). Это такие процессы, родительский процесс которых умер, оставив дочерние процессы рабочими. Это не есть хорошо.
Если вы хотите увидеть ещё больше информации о выполняемых процессах, попробуйте такую команду:
$ ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND |
root 1 0.0 0.0 344 80 ? S Mar02 0:03 init [3] |
root 2 0.0 0.0 0 0 ? SW Mar02 0:13 [kflushd] |
root 3 0.0 0.0 0 0 ? SW Mar02 0:14 [kupdate] |
root 4 0.0 0.0 0 0 ? SW Mar02 0:00 [kpiod] |
root 5 0.0 0.0 0 0 ? SW Mar02 0:17 [kswapd] |
root 11 0.0 0.0 1044 44 ? S Mar02 0:00 /sbin/kerneld |
root 30 0.0 0.0 1160 0 ? SW Mar02 0:01 [cardmgr] |
bin 50 0.0 0.0 1076 120 ? S Mar02 0:00 /sbin/rpc.port |
root 54 0.0 0.1 1360 192 ? S Mar02 0:00 /usr/sbin/sysl |
root 57 0.0 0.1 1276 152 ? S Mar02 0:00 /usr/sbin/klog |
root 59 0.0 0.0 1332 60 ? S Mar02 0:00 /usr/sbin/inet |
root 61 0.0 0.2 1540 312 ? S Mar02 0:04 /usr/local/sbi |
root 63 0.0 0.0 1796 72 ? S Mar02 0:00 /usr/sbin/rpc. |
root 65 0.0 0.0 1812 68 ? S Mar02 0:00 /usr/sbin/rpc. |
root 67 0.0 0.2 1172 260 ? S Mar02 0:00 /usr/sbin/cron |
root 77 0.0 0.2 1048 316 ? S Mar02 0:00 /usr/sbin/apmd |
root 79 0.0 0.1 1100 152 ? S Mar02 0:01 gpm |
root 94 0.0 0.2 1396 280 ? S Mar02 0:00 /usr/sbin/auto |
chris 106 0.0 0.5 1820 680 tty1 S Mar02 0:08 -bash |
root 108 0.0 0.0 1048 0 tty3 SW Mar02 0:00 [agetty] |
root 109 0.0 0.0 1048 0 tty4 SW Mar02 0:00 [agetty] |
root 110 0.0 0.0 1048 0 tty5 SW Mar02 0:00 [agetty] |
root 111 0.0 0.0 1048 0 tty6 SW Mar02 0:00 [agetty] |
(output cut) |
Вывод команды не очень красив, но весьма полезен работает. И всё же мы ещё не увидели всей доступной информации по выполняемым процессам. Есть ещё много разнообразной информации, которую вы можете получить о каждом из процессов. Загляните в man страницу для программы ps. Тем не менее, опции описанные в этом разделе являются наиболее часто применяемыми. И наверное вы будете пользоваться в основном ими.