Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Ключи к здоровью" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
| ← Август 2007 → | ||||||
|
1
|
2
|
4
|
5
|
|||
|---|---|---|---|---|---|---|
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
|
27
|
28
|
29
|
31
|
|||
Статистика
-2 за неделю
Программирование в Linux с нуля [03.08.2007]
Программирование в Linux с нуля [03.08.2006]ОбъявлениеЗдравствуйте! Рассылка "Программирование в Linux с нуля" вышла из отпуска. Книга "Программирование в Linux с нуля" версия 0.091
Tarball:
ftp://ftp.lindevel.ru/zlp/zlp-0.091.tar.gz Изменения:
Новые материалы книгиГлава 6. МНОГОЗАДАЧНОСТЬ6.1. Основы многозадачности в LinuxЭта глава открывает большую и очень важную для Linux-программиста тему многозадачности. Описать все сразу не получится, поэтому мы будем неоднократно возвращаться к многозадачности в последующих главах книги. Пристегните ремни покрепче! Наберите в своей оболочке следующую команду: $ ps -e На экран будут выведен список всех работающих в системе процессов. Если хотите посчитать количество процессов, наберите что-нибудь, набодобие этого: $ ps -e --no-headers | nl | tail -n 1 74 4650 pts/0 00:00:00 tail $ Первое число - это количество работающих в системе процессов. Пользователи KDE могут воспользоваться программой kpm, а пользователи Gnome - программой gnome-system-monitor для получения информации о процессах. На то он и Linux, чтобы позволять пользователю делать одно и то же разными способами. Возникает вопрос: "Что такое процесс?". Процессы в Linux, как и файлы, являются аксиоматическими понятиями. Иногда процесс отождествляют с запущенной программой, однако это не всегда так. Будем считать, что процесс - это рабочая единица системы, которая выполняет что-то. Многозадачность - это возможность одновременного сосуществования нескольких процессов в одной системе. Linux - многозадачная операционная система. Это означает что процессы в ней работают одновременно. Естественно, это условная формулировка. Ядро Linux постоянно переключает процессы, то есть время от времени дает каждому из них сколько-нибудь процессорного времени. Переключение происходит довольно быстро, поэтому нам кажется, что процессы работают одновременно. Одни процессы могут порождать другие процессы, образовывая древовидную структуру. Порождающие процессы называются родителями или родительскими процессами, а порожденные - потомками или дочерними процессами. На вершине этого "дерева" находится процесс init, который порождается автоматически ядром в процесссе загрузки системы. К каждому процессу в системе привязана пара целых неотрицательных чисел: идентификатор процесса PID (Process IDentifier) и идентификатор родительского процесса PPID (Parent Process IDentifier). Для каждого процесса PID является уникальным (в конкретный момент времени), а PPID равен идентификатору процесса-родителя. Если ввести в оболочку команду ps -ef, то на экран будет выведен список процессов со значениями их PID и PPID (вторая и третья колонки соотв.). Вот, например, что творится у меня в системе: $ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 06:16 ? 00:00:01 init [3] root 2 1 0 06:16 ? 00:00:00 [migration/0] root 3 1 0 06:16 ? 00:00:00 [ksoftirqd/0] root 4 1 0 06:16 ? 00:00:00 [watchdog/0] root 5 1 0 06:16 ? 00:00:00 [migration/1] root 6 1 0 06:16 ? 00:00:00 [ksoftirqd/1] root 7 1 0 06:16 ? 00:00:00 [watchdog/1] root 8 1 0 06:16 ? 00:00:00 [events/0] root 9 1 0 06:16 ? 00:00:00 [events/1] root 10 1 0 06:16 ? 00:00:00 [khelper] root 11 1 0 06:16 ? 00:00:00 [kthread] root 35 11 0 06:16 ? 00:00:00 [kblockd/0] root 36 11 0 06:16 ? 00:00:00 [kblockd/1] root 37 11 0 06:16 ? 00:00:00 [kacpid] root 216 11 0 06:16 ? 00:00:00 [kseriod] root 244 11 0 06:16 ? 00:00:00 [pdflush] root 245 11 0 06:16 ? 00:00:00 [pdflush] root 246 11 0 06:16 ? 00:00:00 [kswapd0] root 247 11 0 06:16 ? 00:00:00 [aio/0] root 248 11 0 06:16 ? 00:00:00 [aio/1] root 395 11 0 06:16 ? 00:00:00 [ata/0] root 396 11 0 06:16 ? 00:00:00 [ata/1] root 397 11 0 06:16 ? 00:00:00 [ata_aux] root 407 11 0 06:16 ? 00:00:00 [scsi_eh_0] root 408 11 0 06:16 ? 00:00:00 [scsi_eh_1] root 409 11 0 06:16 ? 00:00:00 [scsi_eh_2] root 410 11 0 06:16 ? 00:00:00 [scsi_eh_3] root 422 11 0 06:17 ? 00:00:00 [scsi_eh_4] root 423 11 0 06:17 ? 00:00:00 [scsi_eh_5] root 1406 11 0 06:17 ? 00:00:00 [kjournald] root 1443 11 0 06:17 ? 00:00:00 [ksuspend_usbd] root 1446 11 0 06:17 ? 00:00:00 [khubd] root 1462 1 0 06:17 ? 00:00:00 /sbin/udevd --daemon root 3230 11 0 06:17 ? 00:00:00 [kpsmoused] nn 3498 11591 0 12:06 pts/1 00:00:08 kate 006.html nn 3984 11591 0 12:08 pts/1 00:00:03 kate 007.html nn 4026 1 0 12:09 ? 00:00:00 kio_uiserver [kdeinit] nobody 4563 6054 0 09:15 ? 00:00:00 /usr/sbin/httpd -k start root 4652 11 0 06:17 ? 00:00:00 [khpsbpkt] root 4785 11 0 06:17 ? 00:00:00 [pccardd] root 4786 11 0 06:17 ? 00:00:00 [tifm/0] root 4840 11 0 06:17 ? 00:00:00 [knodemgrd_0] root 4849 11 0 06:17 ? 00:00:00 [kmmcd] nn 5504 6133 0 12:17 ? 00:00:00 konsole [kdeinit] nn 5505 5504 0 12:17 pts/0 00:00:00 /bin/bash root 5807 11 0 06:17 ? 00:00:00 [kjournald] root 5810 11 0 06:17 ? 00:00:00 [kjournald] root 5970 1 0 06:17 ? 00:00:00 /usr/sbin/syslog-ng root 5973 1 0 06:17 ? 00:00:00 /usr/sbin/crond root 5981 1 0 06:17 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe root 5983 11 0 06:17 ? 00:00:00 [loop0] root 5984 1 0 06:17 tty1 00:00:00 /bin/login -- root 5985 1 0 06:17 tty2 00:00:00 /sbin/agetty 38400 vc/2 linux root 5986 1 0 06:17 tty3 00:00:00 /sbin/agetty 38400 vc/3 linux root 5987 1 0 06:17 tty4 00:00:00 /sbin/agetty 38400 vc/4 linux root 5988 1 0 06:17 tty5 00:00:00 /sbin/agetty 38400 vc/5 linux root 5989 1 0 06:17 tty6 00:00:00 /sbin/agetty 38400 vc/6 linux mysql 6026 5981 0 06:17 ? 00:00:00 /usr/sbin/mysqld --basedir=/usr root 6029 1 0 06:17 ? 00:00:00 /usr/sbin/cupsd postgres 6033 1 0 06:17 ? 00:00:00 /usr/bin/postmaster -D /var/lib/ root 6046 1 0 06:17 ? 00:00:00 /usr/bin/mpd /etc/mpd.conf root 6048 6046 0 06:17 ? 00:00:04 /usr/bin/mpd /etc/mpd.conf root 6049 6048 0 06:17 ? 00:00:01 /usr/bin/mpd /etc/mpd.conf root 6054 1 0 06:17 ? 00:00:00 /usr/sbin/httpd -k start postgres 6059 6033 0 06:17 ? 00:00:00 postgres: writer process postgres 6060 6033 0 06:17 ? 00:00:00 postgres: stats buffer process postgres 6061 6060 0 06:17 ? 00:00:00 postgres: stats collector proces nobody 6062 6054 0 06:17 ? 00:00:00 /usr/sbin/httpd -k start nobody 6063 6054 0 06:17 ? 00:00:00 /usr/sbin/httpd -k start nobody 6064 6054 0 06:17 ? 00:00:00 /usr/sbin/httpd -k start nobody 6065 6054 0 06:17 ? 00:00:00 /usr/sbin/httpd -k start nobody 6066 6054 0 06:17 ? 00:00:00 /usr/sbin/httpd -k start nn 6067 5984 0 06:28 tty1 00:00:00 -bash nn 6071 6067 0 06:28 tty1 00:00:00 xinit root 6072 6071 1 06:28 tty7 00:04:28 X :0 root 6090 6072 0 06:28 tty7 00:00:00 X :0 nn 6092 6071 0 06:28 tty1 00:00:00 /bin/sh /opt/kde/bin/startkde nn 6113 1 0 06:28 ? 00:00:00 /usr/bin/gpg-agent --daemon nn 6116 1 0 06:28 ? 00:00:00 /usr/bin/ssh-agent -s root 6132 1 0 06:28 tty1 00:00:00 start_kdeinit --new-startup +kcm nn 6133 1 0 06:28 ? 00:00:00 kdeinit Running... nn 6136 1 0 06:28 ? 00:00:00 dcopserver [kdeinit] --nosid nn 6138 6133 0 06:28 ? 00:00:00 klauncher [kdeinit] --new-startu nn 6140 1 0 06:28 ? 00:00:21 kded [kdeinit] --new-startup nn 6145 6092 0 06:28 tty1 00:00:00 kwrapper ksmserver nn 6147 1 0 06:28 ? 00:00:00 ksmserver [kdeinit] nn 6148 6133 0 06:28 ? 00:00:05 kwin [kdeinit] -session 106e6e64 nn 6150 1 0 06:28 ? 00:00:00 knotify [kdeinit] nn 6152 1 0 06:28 ? 00:00:02 kdesktop [kdeinit] nn 6154 1 0 06:28 ? 00:00:11 kicker [kdeinit] nn 6160 1 0 06:28 ? 00:00:00 kaccess [kdeinit] nn 6163 1 0 06:28 ? 00:00:00 kmix [kdeinit] -session 106e6e64 nn 6164 6133 0 06:28 ? 00:00:00 konqueror [kdeinit] --preload nn 6166 6133 0 06:28 ? 00:00:00 konqueror [kdeinit] --preload nn 6242 6133 0 06:29 ? 00:00:04 /usr/bin/python /usr/bin/sonata nn 6251 6133 0 09:24 ? 00:00:00 kio_file [kdeinit] file /tmp/kso nn 6256 1 0 06:29 ? 00:00:00 dbus-launch --autolaunch 27b9194 nn 6257 1 0 06:29 ? 00:00:00 /usr/bin/dbus-daemon --fork --pr nn 8952 1 0 06:43 ? 00:00:40 kopete nn 10460 6133 0 12:43 ? 00:00:01 konsole [kdeinit] nn 10461 10460 0 12:43 pts/2 00:00:00 /bin/bash nn 11454 10461 0 12:49 pts/2 00:00:00 ps -ef nn 11590 6133 0 06:58 ? 00:00:03 konsole [kdeinit] nn 11591 11590 0 06:58 pts/1 00:00:00 /bin/bash nn 13609 6133 0 07:07 ? 00:00:00 /bin/sh /usr/bin/firefox nn 13620 13609 0 07:07 ? 00:00:00 /bin/sh /opt/firefox/run-mozilla nn 13625 13620 1 07:07 ? 00:05:52 /opt/firefox/firefox-bin nn 13632 1 0 07:07 ? 00:00:00 /opt/gnome/libexec/gconfd-2 12 nobody 24957 6054 0 08:09 ? 00:00:00 /usr/sbin/httpd -k start Надо отметить, что процесс init всегда имеет идентификатор 1 и PPID равный 0. Хотя в реальности процесса с идентификатором 0 не существует. Дерево процессов можно также пресставить в наглядном виде при помощи опции --forest программы ps:
$ ps -e --forest
PID TTY TIME CMD
1 ? 00:00:01 init
2 ? 00:00:00 migration/0
3 ? 00:00:00 ksoftirqd/0
4 ? 00:00:00 watchdog/0
5 ? 00:00:00 migration/1
6 ? 00:00:00 ksoftirqd/1
7 ? 00:00:00 watchdog/1
8 ? 00:00:00 events/0
9 ? 00:00:00 events/1
10 ? 00:00:00 khelper
11 ? 00:00:00 kthread
35 ? 00:00:00 \_ kblockd/0
36 ? 00:00:00 \_ kblockd/1
37 ? 00:00:00 \_ kacpid
216 ? 00:00:00 \_ kseriod
244 ? 00:00:00 \_ pdflush
245 ? 00:00:00 \_ pdflush
246 ? 00:00:00 \_ kswapd0
247 ? 00:00:00 \_ aio/0
248 ? 00:00:00 \_ aio/1
395 ? 00:00:00 \_ ata/0
396 ? 00:00:00 \_ ata/1
397 ? 00:00:00 \_ ata_aux
407 ? 00:00:00 \_ scsi_eh_0
408 ? 00:00:00 \_ scsi_eh_1
409 ? 00:00:00 \_ scsi_eh_2
410 ? 00:00:00 \_ scsi_eh_3
422 ? 00:00:00 \_ scsi_eh_4
423 ? 00:00:00 \_ scsi_eh_5
1406 ? 00:00:00 \_ kjournald
1443 ? 00:00:00 \_ ksuspend_usbd
1446 ? 00:00:00 \_ khubd
3230 ? 00:00:00 \_ kpsmoused
4652 ? 00:00:00 \_ khpsbpkt
4785 ? 00:00:00 \_ pccardd
4786 ? 00:00:00 \_ tifm/0
4840 ? 00:00:00 \_ knodemgrd_0
4849 ? 00:00:00 \_ kmmcd
5807 ? 00:00:00 \_ kjournald
5810 ? 00:00:00 \_ kjournald
5983 ? 00:00:00 \_ loop0
1462 ? 00:00:00 udevd
5970 ? 00:00:00 syslog-ng
5973 ? 00:00:00 crond
5981 ? 00:00:00 mysqld_safe
6026 ? 00:00:00 \_ mysqld
5984 tty1 00:00:00 login
6067 tty1 00:00:00 \_ bash
6071 tty1 00:00:00 \_ xinit
6072 tty7 00:04:40 \_ X
6090 tty7 00:00:00 | \_ X
6092 tty1 00:00:00 \_ startkde
6145 tty1 00:00:00 \_ kwrapper
5985 tty2 00:00:00 agetty
5986 tty3 00:00:00 agetty
5987 tty4 00:00:00 agetty
5988 tty5 00:00:00 agetty
5989 tty6 00:00:00 agetty
6029 ? 00:00:00 cupsd
6033 ? 00:00:00 postmaster
6059 ? 00:00:00 \_ postmaster
6060 ? 00:00:00 \_ postmaster
6061 ? 00:00:00 \_ postmaster
6046 ? 00:00:00 mpd
6048 ? 00:00:04 \_ mpd
6049 ? 00:00:01 \_ mpd
6054 ? 00:00:00 httpd
6062 ? 00:00:00 \_ httpd
6063 ? 00:00:00 \_ httpd
6064 ? 00:00:00 \_ httpd
6065 ? 00:00:00 \_ httpd
6066 ? 00:00:00 \_ httpd
24957 ? 00:00:00 \_ httpd
4563 ? 00:00:00 \_ httpd
6113 ? 00:00:00 gpg-agent
6116 ? 00:00:00 ssh-agent
6132 tty1 00:00:00 start_kdeinit
6133 ? 00:00:00 kdeinit
6138 ? 00:00:00 \_ klauncher
6148 ? 00:00:05 \_ kwin
6164 ? 00:00:00 \_ konqueror
6166 ? 00:00:00 \_ konqueror
6242 ? 00:00:04 \_ sonata
11590 ? 00:00:03 \_ konsole
11591 pts/1 00:00:00 | \_ bash
3498 pts/1 00:00:09 | \_ kate
3984 pts/1 00:00:03 | \_ kate
13609 ? 00:00:00 \_ firefox
13620 ? 00:00:00 | \_ run-mozilla.sh
13625 ? 00:05:56 | \_ firefox-bin
6251 ? 00:00:00 \_ kio_file
5504 ? 00:00:00 \_ konsole
5505 pts/0 00:00:00 | \_ bash
10460 ? 00:00:01 \_ konsole
10461 pts/2 00:00:00 \_ bash
12140 pts/2 00:00:00 \_ ps
6136 ? 00:00:00 dcopserver
6140 ? 00:00:21 kded
6147 ? 00:00:00 ksmserver
6150 ? 00:00:00 knotify
6152 ? 00:00:02 kdesktop
6154 ? 00:00:11 kicker
6160 ? 00:00:00 kaccess
6163 ? 00:00:00 kmix
6256 ? 00:00:00 dbus-launch
6257 ? 00:00:00 dbus-daemon
8952 ? 00:00:40 kopete
13632 ? 00:00:00 gconfd-2
4026 ? 00:00:00 kio_uiserver
Если вызвать программу ps без аргументов, то будет выведен список процессов, принадлежащих текущей группе, то есть работающих под текущим терминалом. О том, что такое терминалы и группы процессов, будет рассказано в последующих главах. КонтактыСайт проекта Lindevel.Ru (http://www.lindevel.ru) посвящен программированию в Linux. Здесь вы всегда сможете найти последнюю версию книги, а также оставить вопросы и пожелания в форуме (http://forum.lindevel.ru). E-mail автора книги nn at lindevel dot ru (Nikolay N. Ivanov). |
| В избранное | ||