Книга: Основы программирования в Linux
Системные процессы
Системные процессы
Далее приведено несколько процессов, выполнявшихся в другой системе Linux. Вывод был сокращен для облегчения понимания. В следующих примерах вы увидите, как определить состояние или статус процесса. Вывод командой ps столбца STAT
предоставляет коды текущего состояния процесса. Самые широко распространенные коды перечислены в табл. 11.1. Смысл некоторых из них станет понятен чуть позже в этой главе. Другие же не рассматриваются в данной книге и их можно спокойно игнорировать.
Таблица 11.1
Код STAT | Описание |
---|---|
S | Спящий. Обычно ждет появления события, такого как сигнал или активизация ввода |
R |
Выполняющийся. Строго говоря "работоспособный", т.е. в очереди на выполнение, либо выполняющийся, либо готовый к выполнению |
D |
Непрерывно спящий (ожидающий). Обычно ждущий завершения ввода или вывода |
T |
Остановленный. Обычно остановленный системой управления заданиями командной оболочки или находящийся под контролем отладчика |
Z |
Умерший или процесс-зомби |
N | Задача с низким приоритетом, "nice" |
W |
Разбитый на страницы (не используется в Linux с ядром версии 2.6 и последующих версий) |
S | Ведущий процесс сеанса |
+ |
Процесс в группе фоновых процессов |
l |
Многопотоковый процесс |
< |
Задача с высоким приоритетом |
$ ps ах
PID TTY STAT TIME COMMAND
1 ? Ss 0:03 init [5]
2 ? S 0:00 [migration/0]
3 ? SN 0:00 [ksoftirqd/0]
4 ? S< 0:05 [events/0]
5 ? S< 0:00 [khelper]
6 ? S< 0:00 [kthread]
840 ? S< 2:52 [kjournald]
888 ? S<s 0:03 /sbin/udevd --daemon
3069 ? Ss 0:00 /sbin/acpid
3098 ? Ss 0:11 /usr/sbin/hald --daemon=yes
3099 ? S 0:00 hald-runner
8357 ? Ss 0:03 /sbin/syslog-ng
8677 ? Ss 0:00 /opt/kde3/bin/kdm
9119 ? S 0:11 konsole [kdeinit]
9120 pts/2 Ss 0:00 /bin/bash
9151 ? Ss 0:00 /usr/sbin/cupsd
9457 ? Ss 0:00 /usr/sbin/cron
9479 ? Ss 0:00 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid
9618 tty1 Ss+ 0:00 /sbin/mingetty --noclear tty1
9619 tty2 Ss+ 0:00 /sbin/mingetty tty2
9621 tty3 Ss+ 0:00 /sbin/mingetty tty3
9622 tty4 Ss+ 0:00 /sbin/mingetty tty4
9623 tty5 Ss+ 0:00 /sbin/mingetty tty5
9638 tty6 Ss+ 0:00 /sbin/mingetty tty6
10359 tty1 Ss+ 10:05 /usr/bin/Xorg -br -nolisten tcp :0 vt7 -auth
10360 ? S 0:00 -:0
10381 ? Ss 0:00 /bin/sh /usr/bin/kde
10438 ? Ss 0:00 /usr/bin/ssh-agent /bin/bash /etc/X11/xinit/xinitrc
10478 ? S 0:00 start_kdeinit --new-startup +kcminit_startup
10479 ? Ss 0:00 kdeinit Running...
10500 ? S 0:53 kdesktop [kdeinit]
10502 ? S 1:54 kicker [kdeinit]
10524 ? Sl 0:47 beagled /usr/lib/beagle/BeagleDaemon.exe --bg
10530 ? S 0:02 opensuseupdater
10539 ? S 0:02 kpowersave [kdeinit]
10541 ? S 0:03 klipper [kdeinit]
10555 ? S 0:01 kio_uiserver [kdeinit]
10688 ? S 0:53 konsole [kdeinit]
10689 pts/1 Ss+ 0:07 /bin/bash
10784 ? S 0:00 /opt/kde3/bin/kdesud
11052 ? S 0:01 [pdflush]
19996 ? SN1 0:20 beagled-helper /usr/lib/beagle/IndexHelper.exe
20254 ? S 0:00 qmgr -1 -t fifo -u
21192 ? Ss 0:00 /usr/sbin/ntpd -p /var/run/ntp/ntpd.pid -u ntp -i /v
21198 ? S 0:00 pickup -1 -t fifo -u
21475 pts/2 R+ 0:00 ps ax
Здесь вы видите на самом деле очень важный процесс
1 ? Ss 0:03 init [5]
В основном каждый процесс запускается другим процессом, называемым родительским или порождающим процессом. Подобным образом запущенный процесс называют дочерним или порожденным. Когда стартует ОС Linux, она выполняет единственную программу, первого предка и процесс с номером 1, init
. Это, если хотите, диспетчер процессов операционной системы и прародитель всех процессов. Другие системные процессы, с которыми вы вскоре встретитесь, запускаются процессом init
или другим процессом, запущенным процессом init
.
Один из таких примеров — процедура регистрации. Процесс init
запускает программу getty
для каждого последовательного терминала или модема коммутируемой линии передачи, которые можно применять для регистрации. Эти процессы отображены в следующем выводе команды ps:
9619 tty2 Ss+ 0:00 /sbin/mingetty tty2
Процессы getty
ждут работы на терминале, приглашая пользователя зарегистрироваться хорошо всем знакомой строкой, и затем передают управление программе регистрации, которая устанавливает окружение пользователя и в конце запускает сеанс командной оболочки. Когда пользовательский сеанс командной оболочки завершается, процесс init
запускает новый процесс getty
.
Как видите, способность запускать новые процессы и ждать их окончания — одна из основных характеристик системы. Позже в этой главе вы узнаете, как выполнять аналогичные задачи в ваших собственных программах с помощью системных вызовов fork
, exec
и wait
.
- Процессы
- Прикладные процессы
- 5 Процессы
- Глава 7 Системные вызовы в UNIX
- Системные переменные ROWS_AFFECTED, GDSCODE, SQLCODE, TRANSACTIONJD, CONNECTIONJD
- Системные вызовы и драйверы устройств
- ГЛАВА 5. СИСТЕМНЫЕ ОПЕРАЦИИ ДЛЯ РАБОТЫ С ФАЙЛОВОЙ СИСТЕМОЙ
- Рабочие процессы
- Системные вызовы управления процессорной привязкой
- Почему за время, пока компьютер выключен, сильно отстают системные часы, сбивается дата?
- При завершении работы Windows сообщает, что некоторые процессы не отвечают, и компьютер не выключается. Как завершать та...
- Почему в ноутбуке пропали системные звуки? При этом звуковые файлы воспроизводятся только в Winamp. Переустанавливал дра...