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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ распрСдСлСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 144

Автор Π₯ьюз ΠšΠ°ΠΌΠ΅Ρ€ΠΎΠ½

ЛогичСскоС обоснованиС

Ѐункция posix_spawn () ΠΈ Π΅Π΅ «близкая родствСнница» функция posix_spawnp () Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ для прСодолСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΡ‹Ρ… трудностСй использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fork (): Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fork () слоТно (ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ) Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· ΠΎΠ±ΠΌΠ΅Π½Π° (ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ) ΠΈΠ»ΠΈ динамичСской трансляции адрСса.

β€’Β ΠžΠ±ΠΌΠ΅Π½ (ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰Π΅ΠΉ страницы Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти, Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ) β€” Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС слишком ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для срСды Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

β€’Β ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»Π΅Π½ΠΈΠ΅ динамичСской трансляции адрСса Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° POSIX .

β€’Β Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ процСссов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ POSIX Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ трансляции адрСсов ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… услуг, связанных с MMU (memory management unit β€” Π±Π»ΠΎΠΊ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° POSIX ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ создания процСссов ΠΈ выполнСния Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ эффСктивно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π±Π΅Π· трансляции адрСсов ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… MMU-ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€.

Ѐункция posix_spawn() рСализуСтся ΠΊΠ°ΠΊ библиотСчная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π½ΠΎ ΠΎΠ±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn () ΠΈ posix_spawnp () Π·Π°Π΄ΡƒΠΌΠ°Π½Ρ‹ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ядра ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π·Π°ΠΌΠ΅Π½Ρƒ для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠ°Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ fork() /exec, ΠΈΡ… Ρ†Π΅Π»ΡŒ β€” ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания процСссов для систСм, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ слоТности с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fork (), Π° Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Ρ‚Π΅ΡΠ½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fork () / exec.

Вакая Ρ€ΠΎΠ»ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ posix_spawn() ΠΈ posix_spawnp() ΠΎΠΊΠ°Π·Π°Π»Π° влияниС Π½Π° ΠΈΡ… API-интСрфСйс. Π—Π΄Π΅ΡΡŒ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€ fork()/exec, ΠΏΡ€ΠΈ использовании ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ созданиСм сыновнСго процСсса ΠΈ Π²Ρ‹ΠΏΠΎΠ» Π½ Π΅Π½ΠΈΠ΅ ΠΌ ΠΎΠ±Ρ€Π°Π·Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ; вСдь Π›ΡŽΠ±Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ уровня ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° Π±Ρ‹ ΠΏΠ°Ρ€Π° ΠΌ СтричСского задания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ ΠΌ ΠΎΠ³ΠΎ языка ΠΏΡ€ΠΎΠ³Ρ€Π° ΠΌΠΌ ирования. ΠŸΠΎΡΡ‚ΠΎ ΠΌ Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn () ΠΈ posix_spawnp () ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ создания процСссов, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΌ Start_Process ΠΈ Start_Process_Search ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° POSIX_Process_Primitives Π² языкС программирования Ada, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ опСрациям, прСдусмотрСнным Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах (Π½ΠΎ Π½Π΅ UNIX), оснащСнных POSIX -Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn() ΠΈ posix_spawnp() ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡˆΠ΅ΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ наслСдования: Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ дСскрипторами, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ (ID) Π³Ρ€ΡƒΠΏΠΏΡ‹ процСссов, ID ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹, маской сигналов, стратСгиСй планирования, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сигналами (Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сигнал, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ процСссС, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π² сыновнСм, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ установлСн Ρ€Π°Π²Π½Ρ‹ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ).

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ управлСния Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ дСскрипторами позволяСт нСзависимо записанному ΠΎΠ±Ρ€Π°Π·Ρƒ сыновнСго процСсса ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ сгСнСрированным) Π»ΠΈΠ±ΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ процСссом, Π±Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования срСдств, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ (Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ процСссС. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ управлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹ процСссов позволяСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ управлСния заданиями Π² сыновнСм процСссС связан с Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ процСссС.

УправлСния маской сигналов ΠΈ установкой сигналов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΏΠΎΠ»Π½Π΅ достаточно для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ system(). НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ system() Π½Π΅ являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· явных Ρ†Π΅Π»Π΅ΠΉ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ posix_spawn() ΠΈ posix_spawnp (), всС ΠΆΠ΅ эта ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° составляСт Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 50% ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅ΠΉ «суммы Ρ†Π΅Π»Π΅ΠΉΒ».

НамСрСниС состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ наслС Π΄ ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π΄ Сскриптора Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fork (), ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π·Π° Π΄ Π°Π½Π½Ρ‹Ρ… Π΄ Сйствий Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ наслСдованиС Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ дСскриптора Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сСмСйства exec Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ наслСдованиС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… дСскрипторов Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния ΠΎΠ±Ρ€Π°Π·Π° сыновнСго процСсса, эти Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ приняты ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π΄ Сскрипторов Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΈΡ… Ρ„Π»Π°Π³ΠΎΠ² FD_CLOEXEC Π² ΠΌ ΠΎ ΠΌ Π΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° дСйствий Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² этом Π²Ρ‹Π·ΠΎΠ²Π΅. ΠœΡ‹ ΡƒΠ±Π΅ΠΆΠ΄Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Π² случаях, ΠΊΠΎΠ³Π΄Π° POSIX -ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ языкa Ada (Start_Process) Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ управлСния наслСдованиСм Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ.

ΠœΡ‹ ΠΌ ΠΎΠΆΠ΅ ΠΌ ΠΈ Π΄ Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ря Π΄ ΠΏΡ€ΠΎΠ±Π»Π΅ ΠΌ, связанных с использованиС ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ posix_spawn( ) ΠΈ posix_spawnp (), Π½ΠΎ Π½Π° ΠΌ нСизвСстно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с ΠΌ Сньши ΠΌ количСство ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ ΠΌ. Мо Π΄ ификация срС Π΄ Ρ‹ Π΄ ля Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² сыновнСго процСсса, которая Π½Π΅ опрСдСляСтся с ΠΏΠΎ ΠΌ ΠΎ Ρ‰ ью Π°Ρ€Π³Ρƒ ΠΌ Π΅Π½Ρ‚ΠΎΠ² attrp ΠΈΠ»ΠΈ file_actions, Π΄ ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π² Ρ€ΠΎ Π΄ ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎ ΠΌ процСссС, Π° ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€ΠΎ Π΄ ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ стрСмится ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ свой контСкст, это Π±ΠΎΠ»Π΅Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎ, Ρ‡Π΅ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, достигаСмоС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ fork () /exec. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, слоТно ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° врСмя срСду ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ процСсса, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для бСзопасного измСнСния срСды всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ согласованы. Однако Π½Π° эти Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠΉΡ‚ΠΈ, примСняя Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ‚Π΅Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ posix_spawn () ΠΈ posix_spawnp (), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности. А ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈβ€” это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈ ΠΎΠ½ΠΈ особСнно Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ Π² критичСском ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΊΠΎΠ΄Π΅, сохранСниС Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Β«Ρ€Ρ‹Ρ‡Π°Π³ΠΎΠ² управлСния» срСдой Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ posix_spawn () ΠΈ posix_spawnp () возлагаСтся Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn() ΠΈ posix_spawnp () Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ всСй ΠΏΠΎΠ»Π½ΠΎΡ‚ΠΎΠΉ власти, которая Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Π° для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ fork () / exec. И Ρ‚Π°ΠΊΠΎΠΉ эффСкт Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ. Ѐункция fork () β€” Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ мощная. ΠœΡ‹ ΠΈ Π½Π΅ надСялись ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π΅Π΅ возмоТности Π² простой ΠΈ быстрой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΡŽ. Π’Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn () ΠΈ posix_spawnp () ΠΎΡ‡Π΅Π½ΡŒ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ срСдствам создания процСссов Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ UNIX.

ВрСбования

К Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ posix_spawn() ΠΈ posix_spawnp() ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ трСбования.

β€’Β ΠžΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π±Π΅Π· использования MMU (memory management unit β€” Π±Π»ΠΎΠΊ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ) ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ оборудования.

β€’Β ΠžΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ совмСстимы с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ POSIX -стандартами. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования Ρ‚Π°ΠΊΠΎΠ²Ρ‹.

β€’Β ΠžΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ эффСктивными.

β€’Β Π˜Ρ… ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fork () (Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… условиях) Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ мСньшС 50%.

‒ БистСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn () ΠΈ posix_spawnp (), Π½ΠΎ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° функция fork (), Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

‒ БистСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° функция fork () ΠΈ сСмСйство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ exec, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ posix_spawn() ΠΈ posix_spawnp () ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π”Π²ΡƒΡ…Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΉ синтаксис

POSIX-функция exec ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² с ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ. Π­Ρ‚ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ практичСскими рСалиями. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ²ΡˆΠ°ΡΡΡ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ posix_spawn() сущСствСнно отличаСтся ΠΎΡ‚ POSIX-Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, ΠΌΡ‹ посчитали, Ρ‡Ρ‚ΠΎ простота Π²Π°ΠΆΠ½Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ совмСстимости. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ прСдставили Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn ().

Π Π°Π·Π»ΠΈΡ‡ΠΈΠΉ Π² списках ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ функциями posix_spawn () ΠΈ posix_spawnp () практичСски Π½Π΅Ρ‚; ΠΏΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawnp() Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ интСрпрСтируСтся Π±ΠΎΠ»Π΅Π΅ слоТно, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn ().

Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с POSIX.5 (Ada)