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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² срСдС Linux. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 147

Автор Майкл ДТонсон

48

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ это Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС ext2. Π­Ρ‚ΠΈ Π΄Π²Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ (ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΡΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму ext3 Π½Π° ext2), ΠΈ прСдставлСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° ΠΎΠ±Π΅ΠΈΡ…. ЀактичСски, Ссли Π² исходных тСкстС Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ 3 Π½Π° 2, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅.

49

Π₯отя Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ PATH_MAX Π±ΡƒΠ΄Π΅Ρ‚ достаточно Π²Π΅Π»ΠΈΠΊ, Π½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° практичСских Ρ†Π΅Π»Π΅ΠΉ ΠΎΠ½Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚. Если Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π΄Π΅Π»ΠΎ с патологичСскими случаями, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ readlink() ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, увСличивая Π±ΡƒΡ„Π΅Ρ€, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° readlink() Π½Π΅ Π²Π΅Ρ€Π½Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ мСньшС Ρ‡Π΅ΠΌ bufsiz.

50

Π’ зависимости ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ структуры Ρ‚Π°ΠΊΠΆΠ΅ извСстны ΠΊΠ°ΠΊ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

51

Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ процСссС ссылаСтся Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ структуру.

52

Π­Ρ‚Π° тСрминология распространСна Π² большСй части Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΏΠΎ стандартам, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΅Π΄ΠΈΠ½ΡƒΡŽ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Unix (Single Unix Specification).

53

Π­Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ nohup.

54

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Ρ€Π΅Π΅Π½Ρ‚Π΅Ρ€Π°Π±Π΅Π»ΡŒΠ½Ρ‹Ρ… функциях Π½Π΅ ограничиваСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ сигналов. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ прилоТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ с большой ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ Ρ€Π΅Π΅Π½Ρ‚Π΅Ρ€Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ.

55

Π’ΠΎΠΎΠ±Ρ‰Π΅-Ρ‚ΠΎ, Π½Π΅ совсСм Ρ‚Π°ΠΊ. МодСль ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов ANSI/ISO Π‘ спСцифицирована Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ ΠΌΡ‹ Π΅Π΅ прСдставили. Однако ΠΎΠ½Π° допускаСт сброс ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ SIG_DFL ΠΏΠ΅Ρ€Π΅Π΄ доставкой сигнала, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ signal() Π² ASNI/ISO Π‘ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌΠΈ.

56

БпСцификация POSIX Real Time Signal позволяСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сигналам ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈ для сигналов, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ объСмами Π΄Π°Π½Π½Ρ‹Ρ…, сущСствСнно измСняСт эту модСль. Π‘ΠΈΠ³Π½Π°Π»Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ этой Π³Π»Π°Π²Ρ‹.

57

Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΈΠΏΡƒ fd_set, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ систСмным Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ select(), описанным Π² Π³Π»Π°Π²Π΅ 13.

58

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ быстрыми ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Ρ‚Π° ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ быстрыми ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ систСмными Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ, ΠΈ ΠΎΠ½Π° обсуТдаСтся Π² Π³Π»Π°Π²Π΅ 11.

59

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ отличия ΠΌΠ΅ΠΆΠ΄Ρƒ этими Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ; ΠΎΠ½ΠΈ ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² настоящСй ΠΊΠ½ΠΈΠ³Π΅ Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ.

60

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ½Π° отправляСт сигнал Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ процСсса.

61

Π­Ρ‚ΠΈ Ρ„Π»Π°Π³ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Single Unix Specification. МногиС ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π°, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΡ‚ описанных Π² тСкстС.

62

Π₯отя ссылка Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах, это Π½Π΅ являСтся пСрСносимым. НСкоторыС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ malloc() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠΉ памяти Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ сСгмСнтации; Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ части Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ памяти слуТСбной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ.

63

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ sigprocmask() ΠΈ pause() для получСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ повСдСния ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ состояниС состязаний, Ссли сигнал, появлСниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ оТидаСтся, поступит ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя систСмными Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ.

64

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ Π΄Π°ΠΌΠΏΠ°Ρ… памяти рассказываСтся Π² Π³Π»Π°Π²Π΅ 10.

65

Π₯отя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ SIGCHLD Π»ΡŽΠ±Ρ‹ΠΌ процСссам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ΠΈ Π²Π»Π°Π΄Π΅ΡŽΡ‚, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹Π΅ сигналы.

66

Π’ Ρ‚Π°Π±Π». 12.2 пСрСчислСны Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, Π° ΠΌΠΎΠΆΠ΅Ρ‚, Π΄Π°ΠΆΠ΅ Π²ΠΎ всСх систСмах Linux. ΠœΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ POSIX спСцифицируСт Π² качСствС бСзопасных для Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² сигналов.

67

Π’Π΅Ρ€ΠΌΠΈΠ½ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя употрСбляСтся здСсь Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΈ доставкС сигнала. Однако срСдства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΎ добавляСт, ΡƒΠ΄ΠΎΠ±Π½Ρ‹ для построСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ систСм Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

68

Π”ΠΎ появлСния стандарта POSIX ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ struct sigcontext Π·Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ прСдставляСт siginfo_t, ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "контСкст" остался ΠΎΡ‚ этой старой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

69

Π­Ρ‚ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π° самом Π΄Π΅Π»Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° структуру struct ucontext, которая позволяСт процСссам Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкстов Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ пространствС. Π”Π°Π½Π½Ρ‹Π΅ вопросы выходят Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Ρ‚Π΅ΠΌ, рассматриваСмых Π² настоящСй ΠΊΠ½ΠΈΠ³Π΅, Π½ΠΎ это Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π² Single Unix Specification.

70

БущСствуСт Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ si_code, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΌΡ‹ обсуТдаСм здСсь, ΠΈ эти значСния ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ асинхронному Π²Π²ΠΎΠ΄Ρƒ-Π²Ρ‹Π²ΠΎΠ΄Ρƒ, очСрСдям сообщСний ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Ρ‚Π΅ΠΌ, обсуТдаСмых Π² ΠΊΠ½ΠΈΠ³Π΅.

71

Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ SIGTRAP, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, ΠΈ SIGPOLL, примСняСмоС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ асинхронного Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Ни ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ описан Π² настоящСй ΠΊΠ½ΠΈΠ³Π΅, поэтому подробности ΠΎΠ± этих сигналах Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π». 12.3.

72

ВспомнитС, Ρ‡Ρ‚ΠΎ SIGCHLD посылаСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ процСсса, Π½ΠΎ ΠΈ ΠΏΡ€ΠΈ Π΅Π³ΠΎ приостановкС ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

73

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… для Π°Ρ€Π΅Π½Π΄Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² (Π³Π»Π°Π²Π° 13), управлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ (Π³Π»Π°Π²Π° 16) ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ (Π³Π»Π°Π²Π° 18).

74

Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚ΠΈΠΏ sigset_t, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для шаблонов сигналов.

75

Когда сСтСвой сокСт ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ (listen()) ΠΈ Π³ΠΎΡ‚ΠΎΠ² ΠΊ ΠΏΡ€ΠΈΠ΅ΠΌΡƒ (accept()), считаСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π³ΠΎΡ‚ΠΎΠ² ΠΊ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΡŽ для Ρ†Π΅Π»Π΅ΠΉ select(); ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сокСтах ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π³Π»Π°Π²Π΅ 17.

76

Если ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ это с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ numfds для poll(), Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ затруднСния.

77

ΠšΡ€ΠΎΠΌΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ядСр сСрии 2.1.

78

Когда Линус Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄Ρ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» select(), Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ядра BSD ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ timeout Π±Ρ‹Π»Π° ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π° ΠΊΠ°ΠΊ ошибка Π½Π° man-страницС для select(). ВмСсто написания ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Линус Ρ€Π΅ΡˆΠΈΠ» "ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ" эту ΠΎΡˆΠΈΠ±ΠΊΡƒ. К соТалСнию, ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Ρ‹ ΠΏΠΎ стандартам ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ BSD.

79

ЀактичСски ядро устанавливаСт ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π° Π·Π°Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° происходит событиС, Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ². Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ устраняСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΎΡ‡Π΅Π½ΡŒ большом количСствС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ опрос Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅.

80

EPOLLET β€” это Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ events, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ epoll с запуска ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π½Π° запуск Ρ„Ρ€ΠΎΠ½Ρ‚ΠΎΠΌ сигнала. Π­Ρ‚Π° Ρ‚Π΅ΠΌΠ° Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ настоящСй ΠΊΠ½ΠΈΠ³ΠΈ, ΠΈ epoll, Π·Π°ΠΏΡƒΡΠΊΠ°Π΅ΠΌΡƒΡŽ Ρ„Ρ€ΠΎΠ½Ρ‚ΠΎΠΌ, слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² особых случаях.

81

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°, показанная Π² тСкстС, прСдоставляСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ элСмСнтов Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ для машин, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… int ΠΈΠΌΠ΅Π΅Ρ‚ 64 Π±ΠΈΡ‚Π°.

82

Π­Ρ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ root для Π½Π°Π±ΠΎΡ€ΠΎΠ², содСрТащих Π±ΠΎΠ»Π΅Π΅ 1000 дСскрипторов.

83

НастоящСС тСстированиС Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. Π‘Ρ‹Π» ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ лишь ΠΎΠ΄ΠΈΠ½ тСстовый ΠΏΡ€ΠΎΠ³ΠΎΠ½, поэтому Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠ½Π°Ρ‡Π°Π»Ρƒ Π±ΡƒΠ΄ΡƒΡ‚ нСустойчивыми, Ρ‡Ρ‚ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, исчСзнСт послС большого количСства ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ².

84

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

85

Π₯отя Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ устройств символьного Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹, /dev/zero отобраТаСтся ΠΈΠΌΠ΅Π½Π½ΠΎ для этого Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

86

Ошибка сСгмСнтации Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ доступа ΠΊ нСраспрСдСлСнной страницС.

87

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

88

Π€Π°ΠΉΠ» /etc/passwd обновляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ процСссами, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ Π½ΠΎΠ²ΡƒΡŽ копию Ρ„Π°ΠΉΠ»Π° с модификациями ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмного Π²Ρ‹Π·ΠΎΠ²Π° rename(). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ такая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ являСтся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ, процСссы ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· etc/passwd Π² любоС врСмя.