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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² QNX/Neutrino 2. Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² QNX Realtime PlatformΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 8

Автор Π ΠΎΠ± ΠšΡ‘Ρ€Ρ‚Π΅Π½

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π² Π΄Π°Π½Π½ΠΎΠΌ процСссС ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΅ΡΡ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈ ядру Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ контСкст ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ эффСктивно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ адрСсноС пространство, достаточно просто ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Если, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ процСссС, Ρ‚ΡƒΡ‚ ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ администратор процСссов ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ адрСсноС пространство. ΠŸΡƒΡΡ‚ΡŒ вас Π½Π΅ бСспокоят Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ этом Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ β€” ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ QNX/Neutrino всС это осущСствляСтся ΠΎΡ‡Π΅Π½ΡŒ быстро.

Запуск процСсса

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

Запуск процСсса ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

НапримСр, ΠΏΡ€ΠΈ запускС процСсса ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку:

$ program1

Π­Ρ‚ΠΎ прСдписываСт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ program1 ΠΈ ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Или, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ:

$ program2 &

Π­Ρ‚ΠΎ прСдписываСт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ program2 Π±Π΅Π· оТидания Π΅Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС говорят, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° program2 Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

Если Π²Ρ‹ ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎ Π΅Π΅ запуска, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ nice β€” Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² UNIX:

$ nice program3

Π­Ρ‚ΠΎ прСдписываСт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ program3 с Π·Π°Π½ΠΈΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ.

Или Π½Π΅Ρ‚?

Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚ΠΎ ΠΌΡ‹ Π²Π΅Π»Π΅Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ nice, с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ. Команда nice Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π½ΠΈΠ·ΠΈΠ»Π° свой собствСнный ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ (ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Β«niceΒ» β€” «благовоспитанная») ΠΈ Π·Π°Ρ‚Π΅ΠΌ запустила ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ program3 с этим Π·Π°Π½ΠΈΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ.

Запуск процСсса ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

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

НапримСр, Π² большой ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠΉ систСмС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΆΠ΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄Π½Π° главная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° запуск всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов вашСго прилоТСния Π½Π° основании Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ запуска процСссов ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ.

Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ QNX/Neutrino обСспСчиваСт для запуска Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов (ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Π΄Ρ€ΡƒΠ³ΠΈΠΌ):

β€’ system();

β€’ ΡΠ΅ΠΌΠ΅ΠΉΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ exec();

β€’ ΡΠ΅ΠΌΠ΅ΠΉΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ spawn();

β€’ fork();

β€’ vfork().

ΠšΠ°ΠΊΡƒΡŽ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ, зависит ΠΎΡ‚ Π΄Π²ΡƒΡ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ: пСрСносимости ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя трСбованиями Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ компромисс.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ всСх запросах Π½Π° созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠŸΠΎΡ‚ΠΎΠΊ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ процСссС Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅, функция заставит администратор процСссов ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ адрСсноС пространство для Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса. Π—Π°Ρ‚Π΅ΠΌ ядро Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ запуск ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Π½ΠΎΠ²ΠΎΠΌ процСссС. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ нСсколько инструкций ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ main(). (ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² случаС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fork() ΠΈΠ»ΠΈ vfork() Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π°Ρ‡Π½Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Π½ΠΎΠ²ΠΎΠΌ процСссС с Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· fork() ΠΈΠ»ΠΈ vfork(), соотвСтствСнно β€” ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Ρ‚ΡŒ с этим Π΄Π΅Π»ΠΎ, ΠΌΡ‹ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ рассмотрим Π½ΠΈΠΆΠ΅).

Запуск процСсса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ system()

Ѐункция system() β€” самая простая функция; ΠΎΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку, Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π½Π°Π±Ρ€Π°Π»ΠΈ Π±Ρ‹ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° подсказку ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, ΠΈ выполняСт Π΅Π΅.

ЀактичСски, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, функция system() запускаСт копию ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΏΡ€ΠΈ написании Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² system(). ΠŸΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π²Ρ‹ΠΉΡ‚ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ снова Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. ВсС это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π΅ потСряв ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ курсора Π² тСкстС. Π’ этом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ я, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΠΎΠ³Ρƒ Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«:!pwdΒ» для отобраТСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΈ этом Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

system("pwd");

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ функция system() для всСх Π΄Π΅Π» Π² ПоднСбСсной? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½Π΅Ρ‚. Однако, Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для мноТСства Π·Π°Π΄Π°Ρ‡, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… создания процСссов.

Запуск процСсса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ exec() ΠΈ spawn()

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ создания процСссов.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создания процСссов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊ сСмСйствам exec() ΠΈ spawn(). ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΌΡ‹ обратимся ΠΊ подробностям ΠΈΡ… примСнСния, рассмотрим ΡΡƒΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

БСмСйство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ exec() подмСняСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ процСсс Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Π― ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽ ΠΏΠΎΠ΄ этим Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° процСсс Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сСмСйства exec(), этот процСсс ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса (PID) ΠΏΡ€ΠΈ этом Π½Π΅ мСняСтся, просто процСсс прСобразуСтся Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ процСссС? ΠœΡ‹ вСрнСмся ΠΊ этой Ρ‚Π΅ΠΌΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fork().

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, сСмСйство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ spawn() Ρ‚Π°ΠΊ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСмСйства spawn() создаСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс (с Π½ΠΎΠ²Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Spawn POSIX Exec POSIX spawn() Π”Π° spawnl() НСт execl() Π”Π° spawnle() НСт execle() Π”Π° spawnlp() НСт execlp() Π”Π° spawnlpe() НСт execlpe() НСт spawnp() Π”Π° spawnv() НСт execv() Π”Π° spawnve() НСт execve() Π”Π° spawnvp() НСт execvp() Π”Π° spawnvpe() НСт execvpe() НСт

Рассмотрим Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ exec() ΠΈ spawn(). Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, прСдставлСнной Π½ΠΈΠΆΠ΅, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π½ΠΈΡ… прСдусмотрСны POSIX, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ β€” Π½Π΅Ρ‚. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, для максимальной пСрСносимости, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ POSIX-совмСстимыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ названия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ малопонятными, Π² ΠΈΡ… суффиксах Π΅ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠ°.

Буффикс: Бмысл: l (Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр Β«LΒ») Бписок Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² опрСдСляСтся Ρ‡Π΅Ρ€Π΅Π· список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ нСпосрСдствСнно Π² самом Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌΡ‹ΠΉ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ NULL. Π΅ УказываСтся ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. p Если Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя ΠΏΡƒΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, для Π΅Π΅ поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ пСрСмСнная окруТСния PATH. v Бписок Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² опрСдСляСтся Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ (массив) Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Бписок Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² здСсь β€” список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.