Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 124

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

==4780== 1,024 bytes in 1 blocks are definitely lost in loss record 1 of 1

==4780==    at 0x4023785: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)

==4780==    by 0x8048420: main (checker.c: 6)

==4780==

==4780== LEAK SUMMARY:

==4780==    definitely lost: 1,024 bytes in 1 blocks.

==4780==      possibly lost: 0 bytes in 0 blocks.

==4780==    still reachable: 0 bytes in 0 blocks.

==4780==         suppressed: 0 bytes in 0 blocks.

--4780--  memcheck: sanity checks: 0 cheap, 1 expensive

--4780--  memcheck: auxmaps: 0 auxmap entries (0k, 0M) in use

--4780--  memcheck: auxmaps: 0 searches, 0 comparisons

--4780--  memcheck: SMs: n_issued = 9 (144k, 0M)

--4780--  memcheck: SMs: n_deissued = 0 (0k, 0M)

--4780--  memcheck: SMs: max_noaccess = 65535 (1048560k, 1023M)

--4780--  memcheck: SMs: max_undefined = 0 (0k, 0M)

--4780--  memcheck: SMs: max_defined = 19 (304k, 0M)

--4780--  memcheck: SMs: max_non_DSМ = 9 (144k, 0M)

--4780--  memcheck: max sec V bit nodes: 0 (0k, 0M)

--4780--  memcheck: set_sec_vbits8 calls: 0 (new: 0, updates: 0)

--4780--  memcheck: max shadow mem size: 448k, 0M

--4780-- translate: fast SP updates identified: 1,456 ( 90.3%)

--4780-- translate: generic_known SP updates identified: 79 ( 4.9%)

--4780-- translate: generic_unknown SP updates identified: 76 ( 4.7%)

--4780--     tt/tc: 3,341 tt lookups requiring 3,360 probes

--4780--     tt/tc: 3,341 fast-cache updates, 3 flushes

--4780--  transtab: new 1,553 (33,037 -> 538,097; ratio 162:10) [0 scs]

--4780--  transtab: dumped 0 (0 -> ??)

--4780--  transtab: discarded 6 (143 -> ??)

--4780-- scheduler: 21,623 jumps (bb entries).

--4780-- scheduler: 0/1,828 major/minor sched events.

--4780--    sanity: 1 cheap, 1 expensive checks.

--4780--    exectx: 30,011 lists, 6 contexts (avq 0 per list)

--4780--    exectx: 6 searches, 0 full compares (0 per 1000)

--4780--    exectx: 0 cmp2, 4 cmp4, 0 cmpAll $

Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ считывания ΠΈ записи, ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ нас Π±Π»ΠΎΠΊΠΈ памяти приводятся с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ мСста, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ для Π½ΠΈΡ… ΠΎΡ‚Π²Π΅Π΄Π΅Π½ΠΎ. Для прСрывания выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΌ мСстС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ.

Π£ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ valgrind Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ошибок ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти. Для выявлСния Ρ‚Π°ΠΊΠΎΠΉ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΎΠΏΡ†ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… valgrind. Для контроля ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ слСдуСт Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ --leak-check=yes. Бписок ΠΎΠΏΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ valgrind --help.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСтся ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ срСдства valgrind, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ дСйствия, ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, ΠΈ выполняСт мноТСство ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ обращСния ΠΊ памяти. Если ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ относится ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ памяти ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, valgrind Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ выполняСтся ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° "сбора мусора", которая опрСдСляСт, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΈ нСосвобоТдСнныС Π±Π»ΠΎΠΊΠΈ памяти. Об этих потСрянных Π±Π»ΠΎΠΊΠ°Ρ… выводится сообщСниС.

РСзюмС 

Π’ этой Π³Π»Π°Π²Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΈΡΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ срСдства ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. БистСма Linux прСдоставляСт ряд ΠΌΠΎΡ‰Π½Ρ‹Ρ… инструмСнтов для удалСния ошибок ΠΈΠ· Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π’Ρ‹ устранили нСсколько ошибок Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° gdb ΠΈ познакомились с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ срСдствами статичСского Π°Π½Π°Π»ΠΈΠ·Π°, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ cflow ΠΈ splint. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΈ рассмотрСны ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ использовании динамичСски распрСдСляСмой памяти, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ срСдства, способныС ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈΡ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ElectricFence ΠΈ valgrind.

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠΈΠ΅ΡΡ Π² этой Π³Π»Π°Π²Π΅, Π² основном хранятся Π½Π° FTP-сСрвСрах Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. Авторы, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ€ΠΎΠΉ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ авторскиС ΠΏΡ€Π°Π²Π° Π½Π° Π½ΠΈΡ…. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π°Ρ€Ρ…ΠΈΠ²Π΅ Linux, ΠΏΠΎ адрСсу http://www.ibiblio.org/pub/Linux. ΠœΡ‹ надССмся, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹Π΅ вСрсии Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½Π° этом Web-сайтС ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… Π²Ρ‹Ρ…ΠΎΠ΄Π° Π² свСт. 

Π“Π»Π°Π²Π° 11

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΈ сигналы

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΈ сигналы Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ Π³Π»Π°Π²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ срСды Linux. Они ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ всСми Π²ΠΈΠ΄Π°ΠΌΠΈ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ОБ Linux ΠΈ UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСм. ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Linux ΠΈ UNIX ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ процСссами, сослуТит Π΄ΠΎΠ±Ρ€ΡƒΡŽ слуТбу систСмным ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ программистам ΠΈΠ»ΠΈ систСмным администраторам.

Π’ этой Π³Π»Π°Π²Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ процСссы Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ срСдС Linux ΠΈ ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π² любой Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ процСссы Π² Π²Π°ΡˆΠΈΡ… собствСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ процСссы ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния ΠΈ ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ процСссов-Π·ΠΎΠΌΠ±ΠΈ. Π’ частности, Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ:

β–‘ структурС процСсса, Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ;

β–‘ Ρ€Π°Π·Π½Ρ‹Ρ… способах запуска Π½ΠΎΠ²Ρ‹Ρ… процСссов;

β–‘ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ…), ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… (Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ…) процСссах ΠΈ процСссах-Π·ΠΎΠΌΠ±ΠΈ;

β–‘ сигналах ΠΈ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ процСсс?

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ UNIX, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ IEEE Std 1003.1, 2004 Edition, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ процСсс ΠΊΠ°ΠΊ "адрСсноС пространство с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ Π² Π½Π΅ΠΌ, ΠΈ систСмныС рСсурсы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ этим ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Π³Π»Π°Π²Π΅ 12, Π° ΠΏΠΎΠΊΠ° Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ процСссом просто Π»ΡŽΠ±ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΡƒΡŽΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

ΠœΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Π΅ систСмы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Linux, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ создаСт процСсс. Π­Ρ‚ΠΎ особСнно Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Π² ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ систСмС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Window System (часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ просто X). Как ΠΈ ОБ Windows, X прСдоставляСт графичСский ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠΌ прилоТСниям Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. КаТдоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΊΠ½Π°Ρ….

Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ систСмой, Linux Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ систСмС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ нСсколько экзСмпляров ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘Π°ΠΌΠ° систСма выполняСт Π² это врСмя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ систСмными рСсурсами ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ доступ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Как Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² Π³Π»Π°Π²Π΅ 4, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°ΡΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ»ΠΈ процСсс состоит ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ), ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов) ΠΈ окруТСния. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² систСмС Linux процСссы совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠ΄ ΠΈ систСмныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² памяти находится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° копия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° процСсса

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ сосущСствованиС Π΄Π²ΡƒΡ… процСссов Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. Если Π΄Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ neil ΠΈ rick Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ grep для поиска Ρ€Π°Π·Π½Ρ‹Ρ… строк Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…, примСняСмыС для этого процСссы ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 11.1.

Рис. 11.1 


Если Π²Ρ‹ смоТСтС Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ps, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π΄Π°Π»Π΅Π΅ ΠΊΠΎΠ΄Π΅, достаточно быстро ΠΈ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡΡ поиски строк, Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ строкам:

$ ps -ef

UID  PID PPID Π‘ STIME TTY  TIME     CMD

rick 101 96   0 18:24 tty2 00:00:00 grep troi nextgen.doc

neil 102 92   0 18:24 tty4 00:00:00 grep kirk trek.txt

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ процСссу выдСляСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€, ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ процСсса ΠΈΠ»ΠΈ PID. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 2 Π΄ΠΎ 32 768. Когда процСсс стартуСт, Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ выбираСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ нСиспользованноС число. Когда всС Π½ΠΎΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄ΡƒΡ‚ исчСрпаны, Π²Ρ‹Π±ΠΎΡ€ ΠΎΠΏΡΡ‚ΡŒ начнСтся с 2. НомСр 1 ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ для ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса init, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ процСссами. ΠœΡ‹ скоро вСрнСмся ΠΊ процСссу init. А ΠΏΠΎΠΊΠ° Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄Π²ΡƒΠΌ процСссам, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ neil ΠΈ rick, Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ 101 ΠΈ 102.

Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ grep, хранится Π² Ρ„Π°ΠΉΠ»Π΅ Π½Π° дискС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ процСсс Linux Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ для хранСния ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, поэтому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ загруТаСтся Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠ°ΠΊ доступный Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. На рис. 11.1 Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ нСльзя ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ бСзопасно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ совмСстно.

БистСмныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² памяти Π½ΡƒΠΆΠ½Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° копия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printf, Π΄Π°ΠΆΠ΅ Ссли ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π΅Π΅. Π­Ρ‚Π° схСма Π±ΠΎΠ»Π΅Π΅ слоТная, Π½ΠΎ аналогичная Ρ‚ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ОБ Windows.

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ схСмы, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ прСимущСство Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ дисковый Ρ„Π°ΠΉΠ», содСрТащий ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ grep, мСньшС, Ρ‚.ΠΊ. Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, для ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ это Π½Π΅ слишком ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΡ‹ΠΉ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ, Π½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘ экономит Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π² Ρ†Π΅Π»ΠΎΠΌ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½Π΅ всС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ совмСстно использовано. НапримСр, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ процСссом. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ искомая строка, пСрСдаваСмая ΠΊΠΎΠΌΠ°Π½Π΄Π΅ grep, β€” это пСрСмСнная s, принадлСТащая пространству Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса. Π­Ρ‚ΠΈ пространства Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссом. Π€Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… grep, Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π·Π½Ρ‹Π΅; Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса Π΅ΡΡ‚ΡŒ свой Π½Π°Π±ΠΎΡ€ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ.