Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Реферат - Потоки / Библиотека языка C GNU glibc Дочерние Процессы

.htm
Скачиваний:
16
Добавлен:
02.05.2014
Размер:
44.02 Кб
Скачать

вЙВМЙПФЕЛБ СЪЩЛБ C GNU glibc: дПЮЕТОЙЕ рТПГЕУУЩ

оБЮБМБУШ РПДРЙУЛБ ОБ ЦХТОБМ "Linux Format" - РЕТЧЩК Ч тПУУЙЙ ЕЦЕНЕУСЮОЩК ЦХТОБМ, ГЕМЙЛПН РПУЧСЭЕООЩК пу Linux Й OpenSource рп.   рПЙУЛ (ЛМАЮЙ):  ртпзтбннщ уфбфшй упчефщ жптхн уущмлй опчпуфй (+) MAN'Щ дплхнеофбгйс TABLE.opensource { BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BACKGROUND: #ffa; FONT: 12px Arial, Helvetica; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid } TABLE.opensource TD { FONT: bold 12px Arial, Helvetica; TEXT-ALIGN: center } TABLE.opensource TD.osc { BORDER-RIGHT: silver 1px solid } TABLE.opensource LI { MARGIN-LEFT: 2px } TABLE.opensource A { COLOR: red; TEXT-DECORATION: none } TABLE.opensource A:visited { COLOR: red; TEXT-DECORATION: none } TABLE.opensource A:hover { TEXT-DECORATION: underline } .c2 { COLOR: blue } OpenSource.SU – нщ ч тпууйй! CD ПФ 39.5 ТХВ, DVD ПФ 145 ТХВ! ASPLinux 10 (3CD) - 148.5 ТХВ.

SUSE 9.3 (1DVD) - 195 ТХВ. Debian Sarge (2DVD) - 350 ТХВ.

Fedora Core 4 (4CD) - 198 ТХВ. Linux XP Pro (4CD) - 198 ТХВ.

Mandriva 2005 (DVD) - 195ТХВ. FreeBSD 5.4 (2CD) - 99 ТХВ.

OpenOffice.org 2.0beta RU (1CD) - 49.5 ТХВ. рПЙУЛ:  лБФБМПЗ ДПЛХНЕОФБГЙЙ / тХУУЛБС ДПЛХНЕОФБГЙС / рТПЗТБННЙТПЧБОЙЕ, СЪЩЛЙ чРЕТЕД оБЪБД уПДЕТЦБОЙЕ 23. дПЮЕТОЙЕ рТПГЕУУЩ рТПГЕУУЩ - РТЙНЙФЙЧОЩЕ НПДХМЙ ДМС ТЕЪЕТЧЙТПЧБОЙС ТЕУХТУПЧ УЙУФЕНЩ. лБЦДЩК РТПГЕУУ ЙНЕЕФ УПВУФЧЕООПЕ БДТЕУОПЕ РТПУФТБОУФЧП. рТПГЕУУ ЧЩРПМОСЕФ РТПЗТБННХ; чЩ НПЦЕФЕ ЙНЕФШ НОПЗПЛТБФОЩЕ РТПГЕУУЩ, ЧЩРПМОСАЭЙЕ ФХ ЦЕ УБНХА РТПЗТБННХ, ОП ЛБЦДЩК РТПГЕУУ ЙНЕЕФ УПВУФЧЕООХА ЛПРЙА РТПЗТБННЩ ЧОХФТЙ УПВУФЧЕООПЗП БДТЕУОПЗП РТПУФТБОУФЧБ Й ЧЩРПМОСЕФ ЬФП ОЕЪБЧЙУЙНП ПФ ДТХЗЙИ ЛПРЙК. рТПГЕУУЩ ПТЗБОЙЪПЧБОЩ ЙЕТБТИЙЮЕУЛЙ. лБЦДЩК РТПГЕУУ ЙНЕЕФ ТПДЙФЕМШУЛЙК РТПГЕУУ. рТПГЕУУЩ, УПЪДБООЩЕ ДБООЩН ТПДЙФЕМЕН ОБЪЩЧБАФУС ДПЮЕТОЙНЙ РТПГЕУУБНЙ. дПЮЕТОЙК ОБУМЕДХЕФ НОПЗЙЕ ЙЪ БФТЙВХФПЧ ТПДЙФЕМШУЛПЗП РТПГЕУУБ. ьФБ ЗМБЧБ ПРЙУЩЧБЕФ, ЛБЛ РТПЗТБННБ НПЦЕФ УПЪДБЧБФШ, ЪБЧЕТЫБФШ, Й ХРТБЧМСФШ ДПЮЕТОЙНЙ РТПГЕУУБНЙ. жБЛФЙЮЕУЛЙ, ЙНЕАФУС ФТЙ ТБЪМЙЮОЩИ ПРЕТБГЙЙ: УПЪДБОЙЕ ОПЧПЗП ДПЮЕТОЕЗП РТПГЕУУБ, ОБЪОБЮЕОЙЕ ОПЧПНХ РТПГЕУУХ ЧЩРПМОЙФШ РТПЗТБННХ, Й ЛППТДЙОЙТПЧБОЙЕ ЪБЧЕТЫЕОЙС ДПЮЕТОЕЗП РТПГЕУУБ. жХОЛГЙС УЙУФЕНЩ ПВЕУРЕЮЙЧБЕФ РТПУФПК НЕИБОЙЪН ДМС ЧЩРПМОЕОЙС ДТХЗПК РТПЗТБННЩ; ПО ДЕМБЕФ ЧУЕ ФТЙ ЫБЗБ БЧФПНБФЙЮЕУЛЙ. еУМЙ чЩ ОХЦДБЕФЕУШ Ч ВПМШЫПН ЛПМЙЮЕУФЧЕ ЛПОФТПМС, чЩ НПЦЕФЕ ЙУРПМШЪПЧБФШ РТЙНЙФЙЧОЩЕ ЖХОЛГЙЙ, ЮФПВЩ ДЕМБФШ ЛБЦДЩК ЫБЗ ЙОДЙЧЙДХБМШОП. 23.1 чЩРПМОЕОЙЕ лПНБОДЩ рТПУФПК УРПУПВ ЧЩРПМОСФШ ДТХЗХА РТПЗТБННХ УПУФПЙФ Ч ФПН, ЮФПВЩ ЙУРПМШЪПЧБФШ ЖХОЛГЙА system. ьФБ ЖХОЛГЙС ДЕМБЕФ ЧУА ТБВПФХ ЧЩРПМОЕОЙС РПДРТПЗТБННЩ, ОП ПОБ ОЕ ДБЕФ чБН ЛПОФТПМС ОБД РПДТПВОПУФСНЙ: чЩ ДПМЦОЩ ЦДБФШ, РПЛБ РПДРТПЗТБННБ ОЕ ЪБЧЕТЫЙФУС РТЕЦДЕ, ЮЕН чЩ УНПЦЕФЕ ДЕМБФШ ЮФП-ОЙВХДШ ЕЭЕ. int system (const char *command) (ЖХОЛГЙС) ьФБ ЖХОЛГЙС ЧЩРПМОСЕФ command ЛБЛ ЛПНБОДХ ПВПМПЮЛЙ. ч ВЙВМЙПФЕЛЕ GNU C, ПОБ ЧУЕЗДБ ЙУРПМШЪХЕФ ЪБДБООХА РП ХНПМЮБОЙА ПВПМПЮЛХ sh, ЮФПВЩ ЧЩРПМОЙФШ ЛПНБОДХ. ч ЮБУФОПУФЙ ПОБ ЙЭЕФ ЛБФБМПЗЙ Ч PATH, ЮФПВЩ ОБКФЙ РТПЗТБННХ ДМС ЧЩРПМОЕОЙС. чПЪЧТБЭБЕНПЕ ЪОБЮЕОЙЕ -1, ЕУМЙ ОЕ ЧПЪНПЦОП УПЪДБФШ РТПГЕУУ ПВПМПЮЛЙ, ЙОБЮЕ - УПУФПСОЙЕ РТПГЕУУБ ПВПМПЮЛЙ. уН. тБЪДЕМ 23.6 [ъБЧЕТЫЕОЙЕ рТПГЕУУБ], ДМС РПДТПВОПУФЕК ПФОПУЙФЕМШОП ФПЗП, ЛБЛ ЬФПФ ЛПД УПУФПСОЙС НПЦЕФ ЙОФЕТРТЕФЙТПЧБФШУС. жХОЛГЙС system ПВЯСЧМЕОБ Ч ЪБЗМБЧОПН ЖБКМЕ " stdlib.h ". рТЙНЕЮБОЙЕ рЕТЕОПУЙНПУФЙ: оЕЛПФПТЩЕ ТЕБМЙЪБГЙЙ C НПЗХФ ОЕ ЙНЕФШ РПОСФЙЕ ЛПНБОДОПЗП РТПГЕУУПТБ, ЛПФПТЩК НПЦЕФ ЧЩРПМОСФШ ДТХЗЙЕ РТПЗТБННЩ. чЩ НПЦЕФЕ ПРТЕДЕМЙФШ, УХЭЕУФЧХЕФ МЙ ЛПНБОДОЩК РТПГЕУУПТ, ЧЩРПМОСС system (NULL); ЕУМЙ ЧПЪЧТБЭБЕНПЕ ЪОБЮЕОЙЕ ПФМЙЮОП ПФ ОХМС, ЛПНБОДОЩК РТПГЕУУПТ ДПУФХРЕО. Popen Й pclose ЖХОЛГЙЙ (УН. тБЪДЕМ 10.2 [фТХВПРТПЧПД ОБ рПДРТПГЕУУБ]) ВМЙЪЛП УЧСЪБОЩ ЖХОЛГЙЕК system. пОЙ РПЪЧПМСАФ ТПДЙФЕМШУЛПНХ РТПГЕУУХ УЧСЪЩЧБФШУС УП УФБОДБТФОЩН ЧЧПДПН Й ЧЩЧПДПН ЧЩРПМОСЕНПК ЛПНБОДЩ. 23.2 рПОСФЙС уПЪДБОЙС рТПГЕУУБ ьФПФ ТБЪДЕМ ДБЕФ ЛТБФЛЙК ПВЪПТ ДЕКУФЧЙК Й ЫБЗПЧ РП УПЪДБОЙА РТПГЕУУБ Й ЧЩРПМОЕОЙС ЙН ДТХЗПК РТПЗТБННЩ. лБЦДЩК РТПГЕУУ ЙНЕОПЧБО ID РТПГЕУУБ. хОЙЛБМШОЩК ID РТПГЕУУБ ДБО ЛБЦДПНХ РТПГЕУУХ РТЙ УПЪДБОЙЙ. рТПГЕУУЩ УПЪДБАФУС УЙУФЕНОЩН ЧЩЪПЧПН fork (ФБЛ ЮФП ПРЕТБГЙС УПЪДБОЙС ОПЧПЗП РТПГЕУУБ ЙОПЗДБ ЧЩЪЩЧБЕФ ТБЪДЧБЙЧБОЙЕ РТПГЕУУБ). дПЮЕТОЙК РТПГЕУУ, УПЪДБООЩК fork - ФПЮОЩК БОБМПЗ РЕТЧПОБЮБМШОПЗП ТПДЙФЕМШУЛПЗП РТПГЕУУБ, ЪБ ЙУЛМАЮЕОЙЕН ФПЗП, ЮФП ПО ЙНЕЕФ УПВУФЧЕООЩК ID. еУМЙ чЩ ИПФЙФЕ, ЮФПВЩ ЧБЫБ РТПЗТБННБ ЦДБМБ ЪБЧЕТЫЕОЙС ДПЮЕТОЕЗП РТПГЕУУБ, чЩ ДПМЦЕО ДЕМБФШ ЬФП СЧОП РПУМЕ ПРЕТБГЙЙ fork, ЧЩЪПЧПН wait ЙМЙ waitpid (УН. тБЪДЕМ 23.6 [ъБЧЕТЫЕОЙЕ рТПГЕУУБ]). ьФЙ ЖХОЛГЙЙ ДБАФ чБН ПЗТБОЙЮЕООХА ЙОЖПТНБГЙА ПФОПУЙФЕМШОП ФПЗП, РПЮЕНХ ЪБЧЕТЫЙМУС ДПЮЕТОЙК РТГЕУУ - ОБРТЙНЕТ, ЛПД УПУФПСОЙС exit. тБЪДЧПЕООЩК ДПЮЕТОЙК РТПГЕУУ РТПДПМЦБЕФ ЧЩРПМОСФШ ФХ ЦЕ УБНХА РТПЗТБННХ ЛБЛ ТПДЙФЕМШУЛЙК РТПГЕУУ, Ч ФПЮЛЕ ЧПЪЧТБЭЕОЙС fork. чЩ НПЦЕФЕ ЙУРПМШЪПЧБФШ ЧПЪЧТБЭБЕНПЕ ЪОБЮЕОЙЕ ПФ fork, ЮФПВЩ ПФМЙЮЙФШ, ЧЩРПМОСЕФУС МЙ РТПЗТБННБ Ч ТПДЙФЕМШУЛПН РТПГЕУУЕ ЙМЙ Ч ДПЮЕТОЕН. оБМЙЮЙЕ ОЕУЛПМШЛЙИ РТПГЕУУПЧ ЧЩРПМОСАЭИ ФХ ЦЕ УБНХА РТПЗТБННХ ОЕ ПЮЕОШ РПМЕЪОП. оП ДПЮЕТОЙК НПЦЕФ ЧЩРПМОСФШ ДТХЗХА РТПЗТБННХ, ЙУРПМШЪХС ПДОХ ЙЪ ЪБРХУЛБАЭЙИ ЖХОЛГЙК; УН. тБЪДЕМ 23.5 [чЩРПМОЕОЙЕ жБКМБ]. рТПЗТБННБ, ЛПФПТХА РТПГЕУУ ЧЩРПМОСЕФ, ОБЪЩЧБЕФУС ПВТБЪПН РТПГЕУУБ. оБЮБМП ЧЩРПМОЕОЙС ОПЧПК РТПЗТБННЩ ЪБУФБЧМСЕФ РТПГЕУУ ЪБВЩФШ ЧУЕ ПФОПУЙФЕМШОП РТЕДЩДХЭЕЗП ПВТБЪБ РТПГЕУУБ; ЛПЗДБ РТПЗТБННБ ЧЩИПДЙФ, РТПГЕУУ ФПЦЕ ЧЩИПДЙФ, ЧНЕУФП ФПЗП, ЮФПВЩ ЧПЪЧТБФЙФШУС Л РТЕДЩДХЭЕНХ ПВТБЪХ РТПГЕУУБ. 23.3 йДЕОФЙЖЙЛБГЙС рТПГЕУУБ Pid_t ФЙР ДБООЩИ ДМС ID РТПГЕУУБ. чЩ НПЦЕФЕ РПМХЮЙФШ ID РТПГЕУУБ, ЧЩЪЩЧБС getpid. жХОЛГЙС getppid ЧПЪЧТБЭБЕФ ID ТПДЙФЕМС ФЕЛХЭЕЗП РТПГЕУУБ (ЬФП ФБЛЦЕ ЙЪЧЕУФОП ЛБЛ ID ТПДЙФЕМШУЛПЗП РТПГЕУУБ). чБЫБ РТПЗТБННБ ДПМЦОБ ЧЛМАЮЙФШ ЪБЗМБЧОЩЕ ЖБКМЩ " unistd.h " Й " sys/types.h " ЮФПВЩ ЙУРПМШЪПЧБФШ ЬФЙ ЖХОЛГЙЙ. pid_t (ФЙР ДБООЩИ) Pid_t ФЙР ДБООЩИ - ГЕМПЕ ЮЙУМП УП ЪОБЛПН, ЛПФПТЩК УРПУПВЕО РТЕДУФБЧЙФШ ID РТПГЕУУБ. ч ВЙВМЙПФЕЛЕ GNU, ЬФП - int. pid_t getpid (void) (ЖХОЛГЙС) Getpid ЖХОЛГЙС ЧПЪЧТБЭБЕФ ID ФЕЛХЭЕЗП РТПГЕУУБ. pid_t getppid (void) (ЖХОЛГЙС) Getppid ЖХОЛГЙС ЧПЪЧТБЭБЕФ ID ТПДЙФЕМС ФЕЛХЭЕЗП РТПГЕУУБ. 23.4 уПЪДБОЙЕ рТПГЕУУБ жХОЛГЙС fork - РТЙНЙФЙЧ ДМС УПЪДБОЙС РТПГЕУУБ. пОБ ПВЯСЧМЕОБ Ч ЪБЗМБЧОПН ЖБКМЕ " unistd.h ". pid_t fork (void) (ЖХОЛГЙС) жХОЛГЙС fork УПЪДБЕФ ОПЧЩК РТПГЕУУ. еУМЙ ПРЕТБГЙС СЧМСЕФУС ХУРЕЫОПК, ФП Й ТПДЙФЕМШУЛЙК Й ДПЮЕТОЙК РТПГЕУУЩ ЧЙДСФ ЮФП fork ЧПЪЧТБЭБЕФУС, ОП У ТБЪМЙЮОЩНЙ ЪОБЮЕОЙСНЙ: ПОБ ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ 0 Ч ДПЮЕТОЕН РТПГЕУУЕ Й ID РПТПЦДЕООПЗП РТПГЕУУБ (ТЕВЕОЛБ) Ч ТПДЙФЕМШУЛПН РТПГЕУУЕ. еУМЙ УПЪДБОЙЕ РТПГЕУУБ РПФЕТРЕМП ОЕХДБЮХ, fork ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ -1 Ч ТПДЙФЕМШУЛПН РТПГЕУУЕ. уМЕДХАЭЙЕ errno ХУМПЧЙС ПЫЙВЛЙ ПРТЕДЕМЕОЩ ДМС fork: EAGAIN ОЕ ЙНЕЕФУС ДПУФБФПЮОЩИ ТЕУХТУПЧ УЙУФЕНЩ ЮФПВЩ УПЪДБФШ ДТХЗПК РТПГЕУУ, ЙМЙ РПМШЪПЧБФЕМШ ХЦЕ ЙНЕЕФ УМЙЫЛПН НОПЗП РТПГЕУУПЧ.

ENOMEM РТПГЕУУ ФТЕВХЕФ ВПМШЫЕЗП ЛПМЙЮЕУФЧБ НЕУФБ ЮЕН УЙУФЕНБ НПЗМБ ПВЕУРЕЮЙФШ.

уРЕГЙЖЙЮЕУЛЙЕ БФТЙВХФЩ ДПЮЕТОЕЗП РТПГЕУУБ, ЛПФПТЩЕ ПФМЙЮБАФУС ПФ ТПДЙФЕМШУЛПЗП РТПГЕУУБ: дПЮЕТОЙК РТПГЕУУ ЙНЕЕФ УПВУФЧЕООЩК ХОЙЛБМШОЩК ID. ID ТПДЙФЕМС ДПЮЕТОЕЗП РТПГЕУУБ - ID ТПДЙФЕМШУЛПЗП РТПГЕУУБ. дПЮЕТОЙК РТПГЕУУ РПМХЮБЕФ УПВУФЧЕООЩЕ ЛПРЙЙ ПРЙУБФЕМЕК ПФЛТЩФЩИ ЖБКМПЧ ТПДЙФЕМШУЛПЗП РТПГЕУУБ. чРПУМЕДУФЧЙЙ ЙЪНЕОЕОЙЕ БФТЙВХФПЧ ПРЙУБФЕМЕК ЖБКМБ Ч ТПДЙФЕМШУЛПН РТПГЕУУЕ ОЕ ВХДЕФ ЧПЪДЕКУФЧПЧБФШ ОБ ПРЙУБФЕМЙ ЖБКМБ Ч ДПЮЕТОЕН, Й ОБПВПТПФ. уН. тБЪДЕМ 8.7 [пРЕТБГЙЙ хРТБЧМЕОЙС]. рТПЫЕДЫЕЕ РТПГЕУУПТОПЕ ЧТЕНС ДМС ДПЮЕТОЕЗП РТПГЕУУБ ХУФБОПЧМЕОП ОБ ОХМШ; УН. тБЪДЕМ 17.1 [рТПГЕУУПТОПЕ ЧТЕНС]. дПЮЕТОЙК ОЕ ОБУМЕДХЕФ ОБВПТ ВМПЛЙТПЧПЛ ЖБКМБ ТПДЙФЕМШУЛПЗП РТПГЕУУПБ. уН. тБЪДЕМ 8.7 [пРЕТБГЙЙ хРТБЧМЕОЙС]. дПЮЕТОЙК ОЕ ОБУМЕДХЕФ ОБВПТ ФБКНЕТПЧ ТПДЙФЕМШУЛПЗП РТПГЕУУБ. уН. тБЪДЕМ 17.3 [хУФБОПЧЛБ уЙЗОБМЙЪБГЙЙ]. оБВПТ ПФМПЦЕООЩИ УЙЗОБМПЧ (УН. тБЪДЕМ 21.1.3 [рПМХЮЕОЙЕ уЙЗОБМПЧ] ) ДМС ДПЮЕТОЕЗП РТПГЕУУБ, ПЮЙЭЕО. (дПЮЕТОЙК РТПГЕУУ ОБУМЕДХЕФ НБУЛХ ВМПЛЙТПЧБООЩИ УЙЗОБМПЧ Й ДЕКУФЧЙК УЙЗОБМПЧ ЙЪ ТПДЙФЕМШУЛПЗП РТПГЕУУБ.)

pid_t vfork (void) (ЖХОЛГЙС) Vfork ЖХОЛГЙС РПДПВОБ fork, ОП ВПМЕЕ ЬЖЖЕЛФЙЧОБ; ПДОБЛП, ЙНЕАФУС ПЗТБОЙЮЕОЙС, ЛПФПТЩН чЩ ДПМЦОЩ УМЕДПЧБФШ, ЮФПВЩ ЙУРПМШЪПЧБФШ ЕЕ ВЕЪПРБУОП. ч ФП ЧТЕНС ЛБЛ fork ДЕМБЕФ РПМОХА ЛПРЙА БДТЕУОПЗП РТПУФТБОУФЧБ ЧЩЪЩЧБАЭЕЗП РТПГЕУУБ Й РПЪЧПМСЕФ, Й ТПДЙФЕМА Й ДПЮЕТОЕНХ ЧЩРПМОСФШУС ОЕЪБЧЙУЙНП, vfork ОЕ ДЕМБЕФ ЬФХ ЛПРЙА. чЪБНЕО, ДПЮЕТОЙК РТПГЕУУ, УПЪДБООЩК У vfork УПЧНЕУФОП ЙУРПМШЪХЕФ БДТЕУОПЕ РТПУФТБОУФЧП ТПДЙФЕМС, РПЛБ ПО ОЕ ЧЩЪЩЧБЕФ ПДОХ ЙЪ ЖХОЛГЙК exec. фЕН ЧТЕНЕОЕН, ТПДЙФЕМШУЛЙК РТПГЕУУ РТЙПУФБОБЧМЙЧБЕФ УЧПЕ ЧЩРПМОЕОЙЕ. чЩ ДПМЦОЩ ВЩФШ ПЮЕОШ ПУФПТПЦОЩ, ЮФПВЩ ОЕ РПЪЧПМЙФШ ДПЮЕТОЕНХ РТПГЕУУХ, УПЪДБООПНХ У vfork ЙЪНЕОСФШ МАВЩЕ ЗМПВБМШОЩЕ ДБООЩЕ ЙМЙ ДБЦЕ МПЛБМШОЩЕ РЕТЕНЕООЩЕ, ПВЭЕДПУФХРООЩЕ У ТПДЙФЕМЕН. лТПНЕ ФПЗП, ДПЮЕТОЙК РТПГЕУУ ОЕ НПЦЕФ ЧПЪЧТБЭБФШУС ЙЪ (ЙМЙ ДЕМБФШ ДМЙООЩК РЕТЕИПД) ЖХОЛГЙЙ, ЛПФПТБС ЧЩЪЧБМБ vfork! ьФП УРХФБМП ВЩ ЙОЖПТНБГЙА ХРТБЧМЕОЙС ТПДЙФЕМШУЛПЗП РТПГЕУУБ. еУМЙ чЩ УПНОЕЧБЕФЕУШ, ЙУРПМШЪХКФЕ fork. оЕЛПФПТЩЕ ПРЕТБГЙПООЩЕ УЙУФЕНЩ ОЕ ЧЩРПМОСАФ vfork. вЙВМЙПФЕЛБ GNU C ТБЪТЕЫБЕФ чБН ЙУРПМШЪПЧБФШ vfork ОБ ЧУЕИ УЙУФЕНБИ, ОП ЖБЛФЙЮЕУЛЙ ЧЩРПМОСЕФ fork, ЕУМЙ vfork ОЕ ДПУФХРОБ. еУМЙ чЩ УПВМАДБЕФЕ УППФЧЕФУФЧХАЭЙЕ РТЕДПУФПТПЦОПУФЙ РТЙ ЙУРПМШЪПЧБОЙЙ vfork, ЧБЫБ РТПЗТБННБ ВХДЕФ ТБВПФБФШ, ДБЦЕ ЕУМЙ УЙУФЕНБ ЙУРПМШЪХЕФ fork ЧЪБНЕО. 23.5 чЩРПМОЕОЙЕ жБКМБ ьФПФ ТБЪДЕМ ПРЙУЩЧБЕФ УПЧПЛХРОПУФШ exec ЖХОЛГЙК, ДМС ЧЩРПМОЕОЙС ЖБКМБ ЛБЛ ПВТБЪБ РТПГЕУУБ. чЩ НПЦЕФЕ ЙУРПМШЪПЧБФШ ЬФЙ ЖХОЛГЙЙ, ЮФПВЩ ЪБУФБЧЙФШ ДПЮЕТОЙК РТПГЕУУ ЧЩРПМОЙФШ ОПЧХА РТПЗТБННХ РПУМЕ ФПЗП, ЛБЛ ПО ВЩМ ТБЪДЧПЕО. ьФЙ ЖХОЛГЙЙ ПФМЙЮБАФУС ФЕН, ЛБЛ чЩ ПРТЕДЕМСЕФЕ БТЗХНЕОФЩ, ОП ПОЙ ЧУЕ ДЕМБАФ ФХ ЦЕ УБНХА ЧЕЭШ. пОЙ ПВЯСЧМЕОЩ Ч ЪБЗМБЧОПН ЖБКМЕ " unistd.h ". int execv (const char *filename, char *const argv[]) (ЖХОЛГЙС) Execv ЖХОЛГЙС ЧЩРПМОСЕФ ЖБКМ, ЙНЕОПЧБООЩК filename ЛБЛ ОПЧЩК ПВТБЪ РТПГЕУУБ. бТЗХНЕОФ argv - НБУУЙЧ УФТПЛ У ОХМЕЧЩН УЙНЧПМПН Ч ЛПОГЕ, ЛПФПТЩК ЙУРПМШЪХЕФУС, ЮФПВЩ ПВЕУРЕЮЙФШ ЪОБЮЕОЙЕ ДМС БТЗХНЕОФБ argv ЖХОЛГЙЙ main РТПЗТБННЩ, ЛПФПТБС ВХДЕФ ЧЩРПМОЕОБ. рПУМЕДОЙК ЬМЕНЕОФ ЬФПЗП НБУУЙЧБ ДПМЦЕО ВЩФШ РХУФПК ХЛБЪБФЕМШ. пВЩЮОП, РЕТЧЩК ЬМЕНЕОФ ЬФПЗП НБУУЙЧБ - ЙНС ЖБКМБ РТПЗТБННЩ. уН. тБЪДЕМ 22.1 [бТЗХНЕОФЩ рТПЗТБННЩ] , ДМС РПДТПВОПУФЕК ПФОПУЙФЕМШОП ФПЗП, ЛБЛ РТПЗТБННЩ НПЗХФ ПВТБЭБФШУС Л ЬФЙН БТЗХНЕОФБН. уТЕДБ ДМС ОПЧПЗП ПВТБЪБ РТПГЕУУБ ВЕТЕФУС ЙЪ РЕТЕНЕООПК environ ФЕЛХЭЕЗП ПВТБЪБ РТПГЕУУБ; УН. тБЪДЕМ 22.2 [рЕТЕНЕООЩЕ УТЕДЩ], ДМС ХФПЮОЕОЙС ЙОЖТНБГЙЙ ПФОПУЙФЕМШОП УТЕД. int execl (const char *filename, const char *arg0, . . .) (ЖХОЛГЙС) рПДПВОБ execv, ОП УФТПЛЙ argv ПРТЕДЕМЕОЩ ЙОДЙЧЙДХБМШОП, Б ОЕ ЛБЛ НБУУЙЧ. рХУФПК ХЛБЪБФЕМШ ДПМЦЕО ВЩФШ РЕТЕДБО ЛБЛ РПУМЕДОЙК ФБЛПК БТЗХНЕОФ. int execve (const char *filename, char *const argv[], char *const env[]) рПДПВОБ execv, ОП ТБЪТЕЫБЕФ чБН ПРТЕДЕМСФШ УТЕДХ ДМС ОПЧПК РТПЗТБННЩ СЧОП ЛБЛ env БТЗХНЕОФ. ьФП ДПМЦЕО ВЩФШ НБУУЙЧ УФТПЛ Ч ФПН ЦЕ УБНПН ЖПТНБФЕ ЛБЛ РЕТЕНЕООБС environ; УН. тБЪДЕМ 22.2.1 [дПУФХР уТЕДЩ]. int execle (const char *filename, const char *arg0, char *const env[], . . .) рПДПВОБ execl, ОП ТБЪТЕЫБЕФ чБН ПРТЕДЕМСФШ УТЕДХ ДМС ОПЧПК РТПЗТБННЩ СЧОП. бТЗХНЕОФ УТЕДЩ РЕТЕДБО РПУМЕ РХУФПЗП ХЛБЪБФЕМС, ЛПФПТЩК ПФНЕЮБЕФ РПУМЕДОЙК БТЗХНЕОФ argv, Й ДПМЦЕО ВЩФШ НБУУЙЧПН УФТПЛ Ч ФПН ЦЕ УБНПН ЖПТНБФЕ ЛБЛ РЕТЕНЕООБС environ. int execvp (const char *filename, char *const argv[]) (ЖХОЛГЙС) Execvp ЖХОЛГЙС РПДПВОБ execv, ЪБ ЙУЛМАЮЕОЙЕН ФПЗП, ЮФП ПОБ ЙЭЕФ ЛБФБМПЗЙ, РЕТЕЮЙУМЕООЩЕ Ч РЕТЕНЕООПК УТЕДЩ PATH (УН. тБЪДЕМ 22.2.2 [уФБОДБТФОБС уТЕДБ]) ЮФПВЩ ОБКФЙ РПМОПЕ ЙНС ЖБКМБ filename, ЕУМЙ filename ОЕ УПДЕТЦЙФ ОБЛМПООХА ЮЕТФХ ЧРТБЧП. ьФБ ЖХОЛГЙС РПМЕЪОБ ДМС ЧЩРПМОСАЭЙИУС ХФЙМЙФ УЙУФЕНЩ, РПФПНХ ЮФП ПОБ ЙЭЕФ ЙИ Ч НЕУФБИ, ЛПФПТЩЕ РПМШЪПЧБФЕМШ ЧЩВТБМ. пВПМПЮЛЙ ЙУРПМШЪХАФ ЕЕ, ЮФПВЩ ЧЩРПМОЙФШ ЛПНБОДЩ ОБРЙУБООЩЕ РПМШЪПЧБФЕМЕН. int execlp (const char *filename, const char *arg0, . . .) (ЖХОЛГЙС) ьФБ ЖХОЛГЙС - РПДПВОБ execl, ЪБ ЙУЛМАЮЕОЙЕН ФПЗП, ЮФП ПОБ ЧЩРПМОСЕФ ФПФ ЦЕ РПЙУЛ ЙНЕОЙ ЖБКМБ ЛБЛ Ч execvp. тБЪНЕТ УРЙУЛБ РБТБНЕФТПЧ Й УРЙУЛБ УТЕДЩ, ЧНЕУФЕ ОЕ ДПМЦЕО ВЩФШ ВПМШЫЕ ЮЕН ARG_MAX ВБКФ. уН. тБЪДЕМ 27.1 [пВЭЙЕ пЗТБОЙЮЕОЙС]. ч УЙУФЕНЕ GNU, ТБЪНЕТ (ЛПФПТЩК УТБЧОЙЧБЕФУС c ARG_MAX) ЧЛМАЮБЕФ, ДМС ЛБЦДПК УФТПЛЙ, ЮЙУМП УЙНЧПМПЧ Ч УФТПЛЕ, РМАУ ТБЪНЕТ char*, РМАУ ПДЙО, ПЛТХЗМЕООЩК ЧЧЕТИ РПУМЕ ХНОПЦЕОЙС ОБ ТБЪНЕТ char*. дТХЗЙЕ УЙУФЕНЩ НПЗХФ ЙНЕФШ ОЕУЛПМШЛП ПФМЙЮОЩЕ РТБЧЙМБ ДМС РПДУЮЕФБ. ьФЙ ЖХОЛГЙЙ ПВЩЮОП ОЕ ЧПЪЧТБЭБАФУС, ФБЛ ЛБЛ ЧЩРПМОЕОЙЕ ОПЧПК РТПЗТБННЩ ЪБУФБЧМСЕФ ЪБЧЕТЫЙФШУС РТПЗТБННХ ЧЩРПМОЕОЙС Ч ОБУФПСЭЕЕ ЧТЕНС. ъОБЮЕОЙЕ -1 ЧПЪЧТБЭЕОП Ч УМХЮБЕ ПФЛБЪБ. ч ДПРПМОЕОЙЕ Л ПВЩЮОЩН УЙОФБЛУЙЮЕУЛЙН ПЫЙВЛБН ЙНЕОЙ ЖБКМБ (УН. тБЪДЕМ 6.2.3 [пЫЙВЛЙ йНЕОЙ ЖБКМБ]), УМЕДХАЭЙЕ errno ХУМПЧЙС ПЫЙВЛЙ ПРТЕДЕМЕОЩ ДМС ЬФЙИ ЖХОЛГЙК: E2BIG ПВЯЕДЙОЕООЩК ТБЪНЕТ УРЙУЛБ РБТБНЕФТПЧ ОПЧПК РТПЗТБННЩ Й УРЙУЛБ УТЕДЩ ВПМШЫЕ ЮЕН ARG_MAX ВБКФ. уЙУФЕНБ GNU ОЕ ЙНЕЕФ ОЙЛБЛПЗП УРЕГЙЖЙЮЕУЛПЗП ПЗТБОЙЮЕОЙС ТБЪНЕТБ УРЙУЛБ РБТБНЕФТПЧ, ФБЛ ЮФП ЬФПФ ЛПД ПЫЙВЛЙ ОЕ НПЦЕФ РПМХЮЙФШУС, ОП чЩ НПЦЕФЕ РПМХЮБФШ ENOMEM ЧЪБНЕО, ЕУМЙ БТЗХНЕОФЩ УМЙЫЛПН ВПМШЫЙЕ ДМС ДПУФХРОПК РБНСФЙ. ENOEXEC ЪБДБООЩК ЖБКМ ОЕ НПЦЕФ ВЩФШ ЧЩРПМОЕО, РПФПНХ ЮФП ПО ОЕ ОБИПДЙФУС Ч РТБЧЙМШОПН ЖПТНБФЕ.

ENOMEM чЩРПМОЕОЙЕ ЪБДБООПЗП ЖБКМБ ФТЕВХЕФ ВПМШЫЕЗП ЛПМЙЮЕУФЧБ РБНСФЙ ЮЕН ВЩМП ДПУФХРОП.

еУМЙ ЧЩРПМОЕОЙЕ ОПЧПЗП ЖБКМБ РТЕХУРЕЧБЕФ, ЬФП НПДЙЖЙГЙТХЕФ РПМЕ ЧТЕНЕОЙ ДПУФХРБ ЖБКМБ, ЛБЛ ВХДФП ЖБКМ ВЩМ РТПЮЙФБО. уН. тБЪДЕМ 9.8.9 [чТЕНЕОБ жБКМБ]. чЩРПМОЕОЙЕ ОПЧПЗП ПВТБЪБ РТПГЕУУБ РПМОПУФША ОЕ ЙЪНЕОСЕФ УПДЕТЦЙНПЕ РБНСФЙ, ЛПРЙТХАФУС ФПМШЛП БТЗХНЕОФЩ Й УФТПЛЙ УТЕДЩ. оП НОПЗП ДТХЗЙИ БФТЙВХФПЧ РТПГЕУУБ ОЕЙЪНЕОСЕНЩ: ID РТПГЕУУБ Й ID ТПДЙФЕМШУЛПЗП РТПГЕУУБ. уН. тБЪДЕМ 23.2 [рПОСФЙС уПЪДБОЙС рТПГЕУУБ]. зТХРРПЧБС РТЙОБДМЕЦОПУФШ УЕБОУБ Й РТПГЕУУБ. уН. тБЪДЕМ 24.1 [рПОСФЙС хРТБЧМЕОЙС ЪБДБОЙСНЙ]. тЕБМШОЩК РПМШЪПЧБФЕМШУЛЙК ID, ID ЗТХРРЩ, Й ДПРПМОЙФЕМШОЩК ID ЗТХРРЩ. уН. тБЪДЕМ 25.2 [чМБДЕМЕГ рТПГЕУУБ]. пФМПЦЕООЩЕ ФБКНЕТЩ. уН. тБЪДЕМ 17.3 [хУФБОПЧЛБ уЙЗОБМЙЪБГЙЙ]. фЕЛХЭЙК ТБВПЮЙК ЛБФБМПЗ Й ЛПТОЕЧПК ЛБФБМПЗ. уН. тБЪДЕМ 9.1 [тБВПЮЙК ЛБФБМПЗ]. нБУЛБ ТЕЦЙНБ УПЪДБЧБЕНПЗП ЖБКМБ. уН. тБЪДЕМ 9.8.7 [хУФБОПЧЛБ рТБЧ]. нБУЛБ УЙЗОБМПЧ рТПГЕУУБ; УН. тБЪДЕМ 21.7.3 [нБУЛБ УЙЗОБМПЧ рТПГЕУУБ]. пФМПЦЕООЩЕ УЙЗОБМЩ; УН. тБЪДЕМ 21.7 [вМПЛЙТПЧБООЩЕ уЙЗОБМЩ]. рТПЫЕДЫЕЕ РТПГЕУУПТОПЕ ЧТЕНС, УЧСЪБООПЕ У РТПГЕУУПН; УН. тБЪДЕМ 17.1 [рТПГЕУУПТОПЕ ЧТЕНС]. еУМЙ set-user-ID Й set-group-ID ВЙФЩ ТЕЦЙНБ ЖБКМБ ПВТБЪБ РТПГЕУУБ ХУФБОПЧМЕОЩ, ЬФП ЧПЪДЕКУФЧХЕФ ОБ ЬЖЖЕЛФЙЧОЩК ID РПМШЪПЧБФЕМС Й ЬЖЖЕЛФЙЧОЩК ID ЗТХРРЩ (УППФЧЕФУФЧЕООП) РТПГЕУУБ. ьФЙ РПОСФЙС ПВУХЦДЕОЩ РПДТПВОП Ч тБЪДЕМЕ 25.2 [чМБДЕМЕГ рТПГЕУУБ].

уЙЗОБМЩ ЛПФПТЩЕ ЙЗОПТЙТХАФУС Ч УХЭЕУФЧХАЭЕН ПВТБЪЕ РТПГЕУУБ, ФБЛЦЕ ВХДХФ ХУФБОПЧМЕОЩ, ЮФПВЩ ЙЗОПТЙТПЧБФШУС Ч ОПЧПН ПВТБЪЕ РТПГЕУУБ. чУЕ ДТХЗЙЕ УЙЗОБМЩ ВХДФ ХУФБОПЧМЕОЩ РП ХНПМЮБОЙА Ч ОПЧПН ПВТБЪЕ РТПГЕУУБ. уН. зМБЧХ 21 [пВТБВПФЛБ уЙЗОБМБ]. пРЙУБФЕМЙ жБКМБ, ПФЛТЩФЩЕ Ч УХЭЕУФЧХАЭЕН ПВТБЪЕ РТПГЕУУБ ПУФБАФУС ПФЛТЩФЩНЙ Ч ОПЧПН ПВТБЪЕ РТПГЕУУБ, ЕУМЙ ПОЙ ОЕ ЙНЕАФ FD_CLOEXEC ЖМБЗБ. жБКМЩ, ЛПФПТЩЕ ПУФБАФУС ПФЛТЩФЩНЙ, ОБУМЕДХАФ ЧУЕ БФТЙВХФЩ ПРЙУБОЙС ПФЛТЩФПЗП ЖБКМБ ЙЪ УХЭЕУФЧХАЭЕЗП ПВТБЪБ РТПГЕУУБ, ЧЛМАЮБС ВМПЛЙТПЧЛЙ ЖБКМБ. пРЙУБФЕМЙ жБКМБ ПВУХЦДЕОЩ Ч зМБЧЕ 8 [чЧПД - ЧЩЧПД ОЙЪЛПЗП ХТПЧОС]. оПЧЩК ПВТБЪ РТПГЕУУБ ОЕ ЙНЕЕФ ОЙЛБЛЙИ РПФПЛПЧ ЪБ ЙУЛМАЮЕОЙЕН ФЕИ, ЮФП ПО УПЪДБЕФ ЪБОПЧП. лБЦДЩК ЙЪ РПФПЛПЧ Ч РТЕДЩДХЭЕН ПВТБЪЕ РТПГЕУУБ ЙНЕЕФ ПРЙУБФЕМШ ЧОХФТЙ ОЕЗП, Й ЬФЙ ПРЙУБФЕМЙ ПУФБАФУС РПУМЕ exec (ЕУМЙ ПОЙ ОЕ ЙНЕАФ FD_CLOEXEC). оПЧЩК ПВТБЪ РТПГЕУУБ НПЦЕФ РПЧФПТОП УПЕДЙОСФШ ЙИ У ОПЧЩНЙ РПФПЛБНЙ, ЙУРПМШЪХС fdopen (УН. тБЪДЕМ 8.4 [пРЙУБФЕМЙ Й рПФПЛЙ]). 23.6 ъБЧЕТЫЕОЙЕ рТПГЕУУБ жХОЛГЙЙ, ПРЙУБООЩЕ Ч ЬФПН ТБЪДЕМЕ ЙУРПМШЪХАФУС, ЮФПВЩ ЦДБФШ ЪБЧЕТЫЕОЙС ЙМЙ ПУФБОПЧБ ДПЮЕТОЕЗП РТПГЕУУБ Й ПРТЕДЕМСФШ ЕЗП УПУФПСОЙЕ. ьФЙ ЖХОЛГЙЙ ПВЯСЧМЕОЩ Ч ЪБЗМБЧОПН ЖБКМЕ " sys/wait.h ". pid_t waitpid (pid_t pid, int *status_ptr, int options) (ЖХОЛГЙС) Waitpid ЖХОЛГЙС ЙУРПМШЪХЕФУС, ЮФПВЩ ЪБРТПУЙФШ ЙОЖПТНБГЙА УПУФПСОЙС ДПЮЕТОЕЗП РТПГЕУУБ, ЮЕК ID СЧМСЕФУС pid. пВЩЮОП, ЧЩЪЩЧБАЭЙК РТПГЕУУ РТЙПУФБОПЧМЕО, РПЛБ ДПЮЕТОЙК РТПГЕУУ ОЕ ДЕМБЕФ ЙОЖПТНБГЙА УПУФПСОЙС ДПУФХРОПК, ЪБЧЕТЫБСУШ. дТХЗЙЕ ЪОБЮЕОЙС ДМС pid БТЗХНЕОФБ ЙНЕАФ УРЕГЙБМШОЩЕ ЙОФЕТРТЕФБГЙЙ. ъОБЮЕОЙЕ -1 ЙМЙ WAIT_ANY ЙОЖПТНБГЙС УПУФПСОЙС ДМС МАВПЗП ДПЮЕТОЕЗП РТПГЕУУБ; ЪОБЮЕОЙЕ 0 ЙМЙ WAIT_MYPGRP ЪБРТБЫЙЧБЕФ ЙОЖПТНБГЙА ДМС МАВПЗП ДПЮЕТОЕЗП РТПГЕУУБ Ч ФПК ЦЕ УБНПК ЗТХРРЕ РТПГЕУУБ ЛБЛ ЧЩЪЩЧБАЭЙК РТПГЕУУ; Й МАВПЕ ДТХЗПЕ ПФТЙГБФЕМШОПЕ ЪОБЮЕОЙЕ - pgid ЪБРТБЫЙЧБЕФ ЙОЖПТНБГЙА ДМС МАВПЗП ДПЮЕТОЕЗП РТПГЕУУБ, ЮЕК ID ЗТХРРЩ - pgid. еУМЙ ЙОЖПТНБГЙС УПУФПСОЙС ДПЮЕТОЕЗП РТПГЕУУБ ДПУФХРОБ ОЕНЕДМЕООП, ЬФБ ЖХОЛГЙС ЧПЪЧТБЭБЕФУС ОЕНЕДМЕООП ВЕЪ ПЦЙДБОЙС. еУМЙ ДПУФХРОБ ЙОЖПТНБГЙС УПУФПСОЙС ВПМШЫЕ ЮЕН ПДОПЗП ЗПФПЧПЗП РТПДПМЦЙФШУС ДПЮЕТОЕЗП РТПГЕУУБ, ПДЙО ЙЪ ОЙИ ВХДЕФ ЧЩВТБО ВЕУРПТСДПЮОП, Й ЕЗП УПУФПСОЙЕ ЧПЪЧТБЭЕОП ОЕНЕДМЕООП. юФПВЩ РПМХЮЙФШ УПУФПСОЙЕ ДТХЗЙИ ЗПФПЧЩИ РТПДПМЦЙФШУС ДПЮЕТОЙИ РТПГЕУУПЧ, чЩ ДПМЦОЩ ЧЩЪЧБФШ waitpid УОПЧБ. бТЗХНЕОФ options - ВЙФПЧБС НБУЛБ. ъОБЮЕОЙЕ ДПМЦОП ВЩФШ РПТБЪТСДОЩН ймй (ФП ЕУФШ `|') ОХМС ЙМЙ ВПМШЫПЗП ЛПМЙЮЕУФЧБ WNOHANG Й WUNTRACED ЖМБЗПЧ. чЩ НПЦЕФЕ ЙУРПМШЪПЧБФШ WNOHANG ЖМБЗ, ЮФПВЩ ХЛБЪБФШ, ЮФП ТПДЙФЕМШУЛЙК РТПГЕУУ ОЕ ДПМЦЕО ЦДБФШ; Й WUNTRACED ЖМБЗ, ЮФПВЩ ЪБРТПУЙФШ ЙОЖПТНБГЙА УПУФПСОЙС ПУФБОПЧМЕООЩИ РТПГЕУУПЧ ФБЛЦЕ ЛБЛ РТПГЕУУПЧ, ЛПФПТЩЕ ЪБЧЕТЫЙМЙУШ. йОЖПТНБГЙС УПУФПСОЙС ДПЮЕТОЕЗП РТПГЕУУБ УПИТБОЕОБ Ч ПВЯЕЛФЕ, ОБ ЛПФПТЩК ХЛБЪЩЧБЕФ status_ptr, ЕУМЙ status_ptr ОЕ РХУФПК ХЛБЪБФЕМШ. чПЪЧТБЭБЕНПЕ ЪОБЮЕОЙЕ - ПВЩЮОП ID ДПЮЕТОЕЗП РТПГЕУУБ, П ЮШЕН УПУФПСОЙЕ УППВЭЕОП. еУМЙ WNOHANG ПРГЙС ВЩМБ ПРТЕДЕМЕОБ Й ОЙЛБЛПК ДПЮЕТОЙК РТПГЕУУ, ОЕ ЦДЕФ, ЮФПВЩ ВЩФШ ПФНЕЮЕООЩН, ФП ЪОБЮЕОЙЕ - ОХМШ. ъОБЮЕОЙЕ -1 ЧПЪЧТБЭЕОП Ч УМХЮБЕ ПЫЙВЛЙ. уМЕДХАЭЙЕ errno ПЫЙВЛЙ ПРТЕДЕМЕОЩ ДМС ЬФПК ЖХОЛГЙЙ: EINTR жХОЛГЙС ВЩМБ РТЕТЧБОБ РПМХЮЕОЙЕН УЙЗОБМБ. уН. тБЪДЕМ 21.5 [рТЕТЧБООЩЕ рТЙНЙФЙЧЩ].

ECHILD оЕ ЙНЕЕФУС ОЙЛБЛЙИ ДПЮЕТОЙИ РТПГЕУУПЧ, ЙМЙ ЪБДБООЩК pid ОЕ ДПЮЕТОЙК ДМС ЧЩЪЩЧБАЭЕЗП РТПГЕУУБ.

EINVAL оЕДПРХУФЙНПЕ ЪОБЮЕОЙЕ БТЗХНЕОФБ options.

ьФЙ УЙНЧПМЙЮЕУЛЙЕ ЛПОУФБОФЩ ПРТЕДЕМЕОЩ ЛБЛ ЪОБЮЕОЙС ДМС pid БТЗХНЕОФБ waitpid ЖХОЛГЙЙ. WAIT_ANY ьФБ НБЛТПЛПНБОДБ (ЮШЕ ЪОБЮЕОЙЕ -1) ПРТЕДЕМСЕФ, ЮФП waitpid ДПМЦЕО ЧПЪЧТБФЙФШ ЙОЖПТНБГЙА УПУФПСОЙС ПФОПУЙФЕМШОП МАВПЗП ДПЮЕТОЕЗП РТПГЕУУБ. WAIT_MYPGRP ьФБ ЛПОУФБОФБ (УП ЪОБЮЕОЙЕН 0) ПРТЕДЕМСЕФ, ЮФП waitpid ДПМЦЕО ЧПЪЧТБФЙФШ ЙОЖПТНБГЙА УПУФПСОЙС ПФОПУЙФЕМШОП МАВПЗП ДПЮЕТОЕЗП РТПГЕУУБ Ч ФПК ЦЕ УБНПК ЗТХРРЕ РТПГЕУУБ ЮФП Й ЧЩЪЩЧБАЭЙК РТПГЕУУ. ьФЙ УЙНЧПМЙЮЕУЛЙЕ ЛПОУФБОФЩ ПРТЕДЕМЕОЩ ЛБЛ ЖМБЗЙ ДМС БТЗХНЕОФБ options ЖХОЛГЙЙ waitpid. чЩ НПЦЕФЕ УДЕМБФШ OR ЖМБЗПЧ ЧНЕУФЕ, ЮФПВЩ РПМХЮЙФШ ЪОБЮЕОЙЕ, Й ЙУРПМШЪПЧБФШ ЕЗП ЛБЛ БТЗХНЕОФ. WNOHANG ьФПФ ЖМБЗ ПРТЕДЕМСЕФ, ЮФП waitpid ДПМЦОБ ЧПЪЧТБФЙФШУС ОЕНЕДМЕООП ЧНЕУФП ПЦЙДБОЙС, ЕУМЙ ОЕ ЙНЕЕФУС ОЙЛБЛПЗП ДПЮЕТОЕЗП РТПГЕУУБ, ЗПФПЧПЗП ВЩФШ ПФНЕЮЕООЩН. WUNTRACED ьФПФ ЖМБЗ ПРТЕДЕМСЕФ, ЮФП waitpid ДПМЦОБ УППВЭЙФШ УПУФПСОЙЕ МАВЩИ ДПЮЕТОЙИ РТПГЕУУПЧ, ЛПФПТЩЕ ВЩМЙ ПУФБОПЧМЕОЩ ФБЛЦЕ ЛБЛ ФЕИ, ЛПФПТЩЕ ЪБЧЕТЫЙМЙУШ. pid_t wait (int *status_ptr) (ЖХОЛГЙС) ьФП - ХРТПЭЕООБС ЧЕТУЙС waitpid; ЙУРПМШЪХЕФУС, ЮФПВЩ ЦДБФШ РПЛБ ОЕ ЪБЧЕТЫЙФУС МАВПК ДПЮЕТОЙК РТПГЕУУ. пВТБЭЕОЙЕ: wait (&status) ЬЛЧЙЧБМЕОФОП: waitpid (-1, &status, 0) йНЕЕФУС РТЙНЕТ ФПЗП, ЛБЛ ЙУРПМШЪПЧБФШ waitpid, ЮФПВЩ РПМХЮЙФШ УПУФПСОЙЕ ЧУЕИ ДПЮЕТОЙИ РТПГЕУУПЧ, ЛПФПТЩЕ ЪБЧЕТЫЙМЙУШ, ВЕЪ ЛБЛПЗП­ МЙВП ПЦЙДБОЙС. ьФБ ЖХОЛГЙС ТБЪТБВПФБОБ, ЮФПВЩ ВЩФШ ПВТБВПФЮЙЛПН ДМС УЙЗОБМБ SIGCHLD, ЛПФПТЩК ХЛБЪЩЧБЕФ, ЮФП РП ЛТБКОЕК НЕТЕ ПДЙО ДПЮЕТОЙК РТПГЕУУ ЪБЧЕТЫЙМУС. void sigchld_handler (int signum) { int pid; int status; while (1) { pid = waitpid (WAIT_ANY, &status, WNOHANG); if (pid < 0) { perror ("waitpid"); break; } if (pid == 0) break; notice_termination (pid, status); } } 23.7 уПУФПСОЙЕ ъБЧЕТЫЕОЙС рТПГЕУУБ еУМЙ ЪОБЮЕОЙЕ УПУФПСОЙС ЧЩИПДБ (УН. тБЪДЕМ 22.3 [ъБЧЕТЫЕОЙЕ рТПЗТБННЩ]) ДПЮЕТОЕЗП РТПГЕУУБ - ОХМШ, ФП ЪОБЮЕОЙЕ УПУФПСОЙС, УППВЭЕООПЕ waitpid ЙМЙ wait - ФБЛЦЕ ОХМШ. чЩ НПЦЕФЕ РТПЧЕТСФШ ДТХЗЙЕ ЧЙДЩ ЙОЖПТНБГЙЙ, ЪБЛПДЙТПЧБООЩЕ Ч ЧПЪЧТБЭЕООПН ЪОБЮЕОЙЙ УПУФПСОЙС, ЙУРПМШЪХС УМЕДХАЭЙЕ НБЛТПЛПНБОДЩ. ьФЙ НБЛТПЛПНБОДЩ ПРТЕДЕМЕОЩ Ч ЪБЗМБЧОПН ЖБКМЕ " sys/wait.h ". int WIFEXITED (int status) ьФБ НБЛТПЛПНБОДБ ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ ПФМЙЮОПЕ ПФ ОХМС ЕУМЙ ДПЮЕТОЙК РТПГЕУУ ЪБЧЕТЫПО exit ЙМЙ _exit. int WEXITSTATUS (int status) еУМЙ WIFEXITED - ЙУФЙОБ, ЬФБ НБЛТПЛПНБОДБ ЧПЪЧТБЭБЕФ 8 ВЙФПЧ НМБДЫЕЗП ТБЪТСДБ ЪОБЮЕОЙС УПУФПСОЙС ЧЩИПДБ ЙЪ ДПЮЕТОЕЗП РТПГЕУУБ. уН. тБЪДЕМ 22.3.2 [уПУФПСОЙЕ чЩИПДБ]. int WIFSIGNALED (int status) ьФБ НБЛТПЛПНБОДБ ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ ПФМЙЮОПЕ ПФ ОХМС, ЕУМЙ ДПЮЕТОЙК РТПГЕУУ ЪБЧЕТЫЕО РПФПНХ ЮФП ПО РПМХЮЙМ УЙЗОБМ ЛПФПТЩК ОЕ ВЩМ ПВТБВПФБО. уН. зМБЧХ 21 [пВТБВПФЛБ уЙЗОБМБ]. int WTERMSIG (int status) еУМЙ WIFSIGNALED - ЙУФЙОБ, ЬФБ НБЛТПЛПНБОДБ ЧПЪЧТБЭБЕФ ОПНЕТ УЙЗОБМБ, ЛПФПТЩК ЪБЧЕТЫЙМ ДПЮЕТОЙК РТПГЕУУ. int WCOREDUMP (int status) ьФБ НБЛТПЛПНБОДБ ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ ПФМЙЮОПЕ ПФ ОХМС, ЕУМЙ ДПЮЕТОЙК РТПГЕУУ ЪБЧЕТЫЕО Й РТПЙЪЧЕДЕО core-ЖБКМ. int WIFSTOPPED (int status) ьФБ НБЛТПЛПНБОДБ ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ ПФМЙЮОПЕ ПФ ОХМС, ЕУМЙ ДПЮЕТОЙК РТПГЕУУ ПУФБОПЧМЕО. int WSTOPSIG (int status) еУМЙ WIFSTOPPED - ЙУФЙОБ, ЬФБ НБЛТПЛПНБОДБ ЧПЪЧТБЭБЕФ ОПНЕТ УЙЗОБМБ, ЛПФПТЩК ЪБУФБЧЙМ ДПЮЕТОЙК РТПГЕУУ ПУФБОПЧЙФШУС. 23.8 BSD жХОЛГЙЙ пЦЙДБОЙС рТПГЕУУБ вЙВМЙПФЕЛБ GNU ФБЛЦЕ ПВЕУРЕЮЙЧБЕФ ЬФЙ УТЕДУФЧБ ДМС УПЧНЕУФЙНПУФЙ У UNIX BSD. BSD ЙУРПМШЪХЕФ ФЙР ДБООЩИ union, ЮФПВЩ РТЕДУФБЧЙФШ ЪОБЮЕОЙС УПУФПСОЙС, Б ОЕ int. дЧБ РТЕДУФБЧМЕОЙС ЖБЛФЙЮЕУЛЙ ЧЪБЙНПЪБНЕОСЕНЩ; ПОЙ ПРЙУЩЧБАФ ФЕ ЦЕ УБНЩЕ ВЙФПЧЩЕ ЫБВМПОЩ. вЙВМЙПФЕЛБ GNU C ПРТЕДЕМСЕФ НБЛТПЛПНБОДЩ ФЙРБ WEXITSTATUS ФБЛ, ЮФПВЩ ПОЙ ТБВПФБМЙ ОБ МАВПН ЧЙДЕ ПВЯЕЛФБ, Й ЖХОЛГЙС wait ПРТЕДЕМЕОБ, ЮФПВЩ РТЙОСФШ МАВПК ФЙР ХЛБЪБФЕМС ЛБЛ БТЗХНЕОФ status_ptr. ьФЙ ЖХОЛГЙЙ ПВЯСЧМЕОЩ Ч " sys/wait.h ". union wait (ФЙР ДБООЩИ) ьФПФ ФЙР ДБООЩИ РТЕДУФБЧМСЕФ ЪОБЮЕОЙС УПУФПСОЙС ПЛПОЮБОЙС РТПЗТБННЩ. пО ЙНЕЕФ УМЕДХАЭЙЕ ЬМЕНЕОФЩ: int w_termsig ъОБЮЕОЙЕ ЬФПЗП ЬМЕНЕОФБ - ФП ЦЕ ЮФП ТЕЪХМШФБФ WTERMSIG НБЛТПЛПНБОДЩ. int w_coredump ъОБЮЕОЙЕ ЬФПЗП ЬМЕНЕОФБ - ТЕЪХМШФБФ WCOREDUMP НБЛТПЛПНБОДЩ. int w_retcode ъОБЮЕОЙЕ ЬФПЗП ЬМЕНЕОФБ - ТЕЪХМШФБФ WEXITSTATUS НБЛТПЛПНБОДЩ. int w_stopsig ъОБЮЕОЙЕ ЬФПЗП ЬМЕНЕОФБ - ТЕЪХМШФБФ WSTOPSIG НБЛТПЛПНБОДЩ. чНЕУФП ФПЗП, ЮФПВЩ ПВТБЭБФШУС Л ЬФЙН ЬМЕНЕОФБН ОЕРПУТЕДУФЧЕООП, чЩ ДПМЦОЩ ЙУРПМШЪПЧБФШ ЬЛЧЙЧБМЕОФОЩЕ НБЛТПЛПНБОДЩ. pid_t wait3 (union wait *status_ptr, int options, struct rusage *usage) еУМЙ usage - РХУФПК ХЛБЪБФЕМШ, wait3 ЬЛЧЙЧБМЕОФОБ waitpid (-1, status_ptr, options). еУМЙ usage - ОЕ РХУФПК УЙНЧПМ, wait3 УПИТБОСЕФ ФЙР ЙУРПМШЪПЧБОЙС ДМС ДПЮЕТОЕЗП РТПГЕУУБ Ч *rusage (ОП ФПМШЛП, ЕУМЙ ДПЮЕТОЙК ЪБЧЕТЫЙМУС, Б ОЕ ПУФБОПЧЙМУС). уН. тБЪДЕМ 17.5 [йУРПМШЪПЧБОЙЕ тЕУХТУПЧ]. pid_t wait4 (pid_t pid, union wait *status_ptr, int options, struct rusage *usage) еУМЙ usage - РХУФПК ХЛБЪБФЕМШ, wait4 ЬЛЧЙЧБМЕОФОБ waitpid (pid, status_ptr, options). еУМЙ usage - ОЕ РХУФПК УЙНЧПМ, wait4 УПИТБОСЕФ ФЙР ЙУРПМШЪПЧБОЙС ДМС ДПЮЕТОЕЗП РТПГЕУУБ Ч *rusage (ОП ФПМШЛП, ЕУМЙ ДПЮЕТОЙК ЪБЧЕТЫЙМУС, Б ОЕ ПУФБОПЧЙМУС). уН. тБЪДЕМ 17.5 [йУРПМШЪПЧБОЙЕ тЕУХТУПЧ]. 23.9 рТЙНЕТ уПЪДБОЙС рТПГЕУУБ чПФ РТЙНЕТ РТПЗТБННЩ, РПЛБЪЩЧБАЭЙК, ЛБЛ чЩ НПЗМЙ ВЩ ОБРЙУБФШ ЖХОЛГЙА, РПДПВОХА ЧУФТПЕООПК УЙУФЕНЕ. пОБ ЧЩРПМОСЕФ БТЗХНЕОФ command, ЙУРПМШЪХС " sh -c command ". #include <stddef.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #define SHELL "/bin/sh" int my_system (const char *command) { int status; pid_t pid; pid = fork (); if (pid == 0) { execl (SHELL, SHELL, "-c", command, NULL); _exit (EXIT_FAILURE); } else if (pid < 0) status = -1; else if (waitpid (pid, &status, 0) != pid) status = -1; return status; } йНЕЕФУС ДЧЕ ЧЕЭЕК, ОБ ЛПФПТЩЕ чЩ ДПМЦОЩ ПВТБФЙФШ ЧОЙНБОЙЕ Ч ЬФПН РТЙНЕТЕ. оЕ ЪБВХДШФЕ, ЮФП РЕТЧЩК БТЗХНЕОФ argv, РТЕДУФБЧМСЕФ ЙНС ЧЩРПМОСЕНПК РТПЗТБННЩ. йНЕООП РПЬФПНХ, Ч ПВТБЭЕОЙЙ Л execl, SHELL ПВЕУРЕЮЕОБ ПДЙО ТБЪ, ЮФПВЩ ОБЪЧБФШ ЧЩРПМОСЕНХА РТПЗТБННХ, Й ЧФПТПК ТБЪ, ЮФПВЩ ПВЕУРЕЮЙФШ ЪОБЮЕОЙЕ ДМС argv [0]. чЩЪПЧ execl Ч ДПЮЕТОЕН РТПГЕУУЕ ОЕ ЧПЪЧТБЭБЕФУС, ЕУМЙ ПО ХУРЕЫЕО. еУМЙ ПО ФЕТРЙФ ОЕХДБЮХ, чЩ ДПМЦЕО ДЕМБФШ ЛПЕ-ЮФП, ЮФПВЩ ЪБУФБЧЙФШ ДПЮЕТОЙК РТПГЕУУ ЪБЧЕТЫЙФШУС. рТБЧЙМШОПЕ РПЧЕДЕОЙЕ ДМС ДПЮЕТОЕЗП РТПГЕУУБ - УППВЭЙФШ ПФЛБЪ ТПДЙФЕМШУЛПНХ РТПГЕУУХ. чЩЪПЧЙФЕ _exit, ЮФПВЩ ЧЩРПМОЙФШ ЬФП. рТЙЮЙОБ ДМС ЙУРПМШЪПЧБОЙС _exit ЧНЕУФП exit УПУФПЙФ Ч ФПН, ЮФПВЩ ЙЪВЕЦБФШ flush РПМОПУФША ВХЖЕТЙЪЙТПЧБООЩИ РПФПЛПЧ ФЙРБ stdout. вХЖЕТБ ЬФЙИ РПФПЛПЧ ЧПЪНПЦОП УПДЕТЦБФ ДБООЩЕ, ЛПФПТЩЕ ВЩМЙ УЛПРЙТПЧБОЩ ЙЪ ТПДЙФЕМШУЛПЗП РТПГЕУУБ ЖХОЛГЙЕК fork, ЬФЙ ДБООЩЕ ВХДХФ ЧЩЧПДЙФШУС Ч ЛПОЕЮОПН УЮЕФЕ ТПДЙФЕМШУЛЙН РТПГЕУУПН. чЩЪПЧ exit Ч ДПЮЕТОЕН ЧЩЧЕМ ВЩ ДБООЩЕ ДЧБЦДЩ. уН. тБЪДЕМ 22.3.5 [чОХФТЕООСС ПТЗБОЙЪБГЙС пЛПОЮБОЙС]. чРЕТЕД оБЪБД уПДЕТЦБОЙЕ

ъБЛБЦЙ УЕВЕ ДЙУФТЙВХФЙЧ! Linux Й BSD РПЮФПК ПФ мЙОХЛУгЕОФТБ:  1. рПДРЙУЛБ ОБ ЦХТОБМ "Linux Format" 4 ОПНЕТБ (УЕОФСВТШ, ПЛФСВТШ, ОПСВТШ Й ДЕЛБВТШ 2005) - 600 ТХВ.

 2. рПУФТПЕОЙЕ УЙУФЕНОПЗП РТЙМПЦЕОЙС У C/C++ - 196 ТХВ.

 3. FreeBSD 5.4 i386 Linuxcenter Edition (4CD) - 295 ТХВ.

 4. Debian GNU/Linux 3.1 r0a Sarge (2DVD) - 500 ТХВ.

 5. Slackware Linux 10.1 (1DVD) - 250 ТХВ.

 6. Fedora Core 4, i386 binaries (1DVD) - ОБУМЕДОЙЛ RedHat Linux - 250 ТХВ.

 7. Gentoo Linux 2005.0 LinuxУenter Edition (6CD) - 450 ТХВ.

 8. ASPLinux 9 Express Edition (3CD) - 105 ТХВ.

 9. цХТОБМ "уЙУФЕНОЩК БДНЙОЙУФТБФПТ", 2005 ЗПД, НБК. - 145 ТХВ.

 10. Whoppix 2.7.1 (1CD) - 95 ТХВ.

вЩУФТБС ОБЧЙЗБГЙС РП УБКФХ __________________ лбфбмпзй: лБФБМПЗ РТПЗТБННОПЗП ПВЕУРЕЮЕОЙС лБФБМПЗ УУЩМПЛ ОБ unix ТЕУХТУЩ лБФБМПЗ ФЕНБФЙЮЕУЛЙИ УФБФЕК бТИЙЧ ДПЛХНЕОФБГЙЙ уПЧЕФЩ, ЪБНЕФЛЙ MAN - уЙУФЕНОЩЕ ТХЛПЧПДУФЧБ __________________ опчпуфй: оПЧПУФЙ OpenNews LastSoft - уЧЕЦЙК УПЖФ пВЪПТЩ рп У freshmeat рТПВМЕНЩ ВЕЪПРБУОПУФЙ оПЧПУФЙ У ДТХЗЙИ УБКФПЧ __________________ пвэеойе: жПТХН/лПОЖЕТЕОЙС _______________ нйой-рптфбмщ: CISCO.opennet.ru BSD.opennet.ru LINUX.opennet.ru SOLARIS.opennet.ru WEB.opennet.ru - web-ФЕИОПМПЗЙЙ SECURITY.opennet.ru PALM.opennet.ru - ЛБТНБООЩЕ рл __________________ обчйзбгйс: оБЧЙЗБГЙС РП ЛМАЮЕЧЩН УМПЧБН уЙУФЕНЩ рпйулб __________________ тбъопе: гхр - гЕОФТ хРТБЧМЕОЙС рТПЕЛФПН дПВБЧМЕОЙЕ Ч ЛБФБМПЗЙ ъБЛМБДЛЙ ОБ УБКФЕ

рТПУМЕДЙФШ ЪБ УФТБОЙГЕК Created 1996-2005 by Maxim Chirkov  

дПВБЧЙФШ, тЕЛМБНБ, чЕВНБУФЕТХ, гхр, зйд