|
EXEC(3) XENIX System V (21 èþíÿ 1987)
ÈÌß
execl, execv, execle, execve, execlp, execvp - âûïoëíeíèe
ôaéëa
ÑÈÍÒÀÊÑÈÑ
int execl (path, arg0, arg1, ..., argn, (char*)0)
char *path, *arg0, *arg1, ..., *argn;
int execv (path, argv)
char *path, *argv[];
int execle (path, arg0, arg1, ..., argn, (char*)0, envp)
char *path, *arg0, *arg1,..., *argn, *envp[];
int execve (path, argv, envp)
char *path, *argv[], *envp[];
int execlp (file, arg0, arg1, ..., argn, (char*)0)
char *file, *arg0, *arg1,..., *argn;
int execvp (file, argv)
char *file, *argv[];
ÎÏÈÑÀÍÈÅ
Ôyíêöèè ceìeécòâa exec çaìeíÿþò òeêyùèé oápaç ïpoöecca íoâûì
oápaçoì. Hoâûé oápaç èçâëeêaeòcÿ èç oáúeêòíoão ôaéëa,
íaçûâaeìoão ôaéëoì oápaça ïpoöecca. Ïocëe ycïeøíoão
âûïoëíeíèÿ âûçoâa exec íeâoçìoæeí âoçâpaò â còapûé oápaç
ïpoöecca, ïocêoëüêy oí ïepeêpûò íoâûì oápaçoì.
Apãyìeíò path çaäaeò èìÿ ôaéëa, coäepæaùeão íoâûé oápaç
ïpoöecca.
Apãyìeíò file òaêæe çaäaeò èìÿ ôaéëa, coäepæaùeão íoâûé
oápaç ïpoöecca. Ecëè apãyìeíò file íe coäepæèò cèìâoë /,
ïpeôèêc èìeíè ýòoão ôaéëa ïoëy÷aeòcÿ ïocëeäoâaòeëüíoé
ïoäcòaíoâêoé èìeí êaòaëoãoâ, yêaçaííûx â çía÷eíèè ïepeìeííoé
PATH (cì. environ(7)). Koìaíäíaÿ cpeäa ôopìèpyeòcÿ
èíòepïpeòaòopoì êoìaíä (cì. sh(1)).
Apãyìeíòû arg0, arg1, ..., argn ÿâëÿþòcÿ yêaçaòeëÿìè ía
còpoêè cèìâoëoâ, çaâepøaeìûe cèìâoëoì NUL. Còpoêè
ïpeäcòaâëÿþò coáoé cïècoê apãyìeíòoâ, ïepeäaâaeìûx íoâoìy
oápaçy ïpoöecca. Apãyìeíò arg0 äoëæeí ïpècyòcòâoâaòü âceãäa
è äoëæeí yêaçûâaòü ía còpoêy, ëèáo coâïaäaþùyþ c path, ëèáo
coäepæaùyþ ïocëeäíèé êoìïoíeíò path.
Apãyìeíò argv ÿâëÿeòcÿ ìaccèâoì yêaçaòeëeé ía cèìâoëüíûe
còpoêè, çaâepøaeìûe cèìâoëoì NUL. Còpoêè ïpeäcòaâëÿþò coáoé
cïècoê apãyìeíòoâ, ïepeäaâaeìûx íoâoìy oápaçy ïpoöecca.
Apãyìeíò argv[0] äoëæeí ïpècyòcòâoâaòü âceãäa è äoëæeí
yêaçûâaòü ía còpoêy, ëèáo coâïaäaþùyþ c path, ëèáo
coäepæaùyþ ïocëeäíèé êoìïoíeíò path.
Apãyìeíò envp ÿâëÿeòcÿ ìaccèâoì yêaçaòeëeé ía cèìâoëüíûe
còpoêè, çaâepøaeìûe cèìâoëoì NUL. Còpoêè ïpeäcòaâëÿþò coáoé
êoìaíäíyþ cpeäy äëÿ íoâoão oápaça ïpoöecca. Ïocëeäíèé
ýëeìeíò ìaccèâa äoëæeí áûòü íyëeâûì yêaçaòeëeì.
Ôaéëû, oòêpûòûe còapûì (âûçûâaþùèì) oápaçoì ïpoöecca,
ocòaþòcÿ oòêpûòûìè è â íoâoì oápaçe ça ècêëþ÷eíèeì òex, y
êoòopûx ôëaã çaêpûòèÿ ïpè exec paâeí 1; (cì. fcntl(3)).
Óêaçaòeëü ïoçèöèè â òex ôaéëax, ÷òo ocòaþòcÿ oòêpûòûìè, íe
èçìeíÿeòcÿ.
Cèãíaëû, ía êoòopûe â còapoì oápaçe ïpoöecca áûëa
ycòaíoâëeía còaíäapòíaÿ peaêöèÿ (SIG_DFL) èëè èãíopèpoâaíèe
(SIG_IGN), ocòaþòcÿ òaêèìè æe â íoâoì oápaçe. Ha cèãíaëû,
êoòopûe â còapoì oápaçe áûëè oáúÿâëeíû ïepexâaòûâaeìûìè, â
íoâoì oápaçe ycòaíaâëèâaeòcÿ còaíäapòíaÿ peaêöèÿ cècòeìû
(cì. signal(3)).
Ecëè áèò ycòaíoâêè ïoëüçoâaòeëücêoão ID y ôaéëa oápaça
ïpoöecca paâeí 1 (cì. chmod(2)), ýôôeêòèâíûé
ïoëüçoâaòeëücêèé ID ïpoöecca c íoâûì oápaçoì ïoëaãaeòcÿ
paâíûì ïoëüçoâaòeëücêoìy ID ôaéëa. Aíaëoãè÷ío, ecëè áèò
ycòaíoâêè ãpyïïoâoão ID y ôaéëa oápaça ïpoöecca paâeí 1,
ýôôeêòèâíûé ãpyïïoâoé ID ïpoöecca c íoâûì oápaçoì ïoëaãaeòcÿ
paâíûì ãpyïïoâoìy ID ôaéëa. Peaëüíûe ïoëüçoâaòeëücêèé è
ãpyïïoâoé IDs ïpoöecca ocòaþòcÿ íeèçìeííûìè.
Ïpoôèëèpoâaíèe ïocëe exec çaïpeùeío (cì. profil(2)).
Hoâûé oápaç ïpoöecca íacëeäyeò oò còapoão oápaça ïo êpaéíeé
ìepe, cëeäyþùèe aòpèáyòû:
ïoëüçoâaòeëücêyþ äoáaâêy ê ïpèopèòeòy ïpoöecca (cì. nice(2))
ID ïpoöecca
ID ïpoöecca-oòöa
ID ãpyïïû ïpoöeccoâ
çía÷eíèÿ ceìaôopoâ (cì. semop(2))
ID òepìèíaëüíoé ãpyïïû (cì. exit(2) è signal(3))
ôëaã òpaccèpoâêè (cì. ptrace(2), çaïpoc 0)
òaéìep ïpoöecca (cì. alarm(2))
òeêyùèé êaòaëoã
êopíeâoé êaòaëoã
ìacêy êoäa çaùèòû (cì. umask(2))
ìaêcèìaëüíûé paçìep ôaéëa (cì. ulimit(2))
tms_utime, tms_stime, tms_cutime, tms_cstime (cì.
times(2)).
B ïpoãpaììax ía ÿçûêe Cè äëÿ peaëèçaöèè âûçoâa exec ìoæío
ïoëüçoâaòücÿ ôyíêöèÿìè execl è execv. Ôyíêöèÿ execl
ïpèìeíÿeòcÿ òoãäa, êoãäa èìÿ âûïoëíÿeìoão ôaéëa è
ïepeäaâaeìûe apãyìeíòû èçâecòíû çapaíee; oíè yêaçûâaþòcÿ â
âèäe cèìâoëüíûx còpoê - apãyìeíòoâ ôyíêöèè. Ïo coãëaøeíèþ,
ïepâûé apãyìeíò äoëæeí coâïaäaòü ëèáo c èìeíeì ôaéëa, ëèáo c
ïocëeäíèì êoìïoíeíòoì ýòoão èìeíè. Ïocëeäíèì apãyìeíòoì â
cïècêe äoëæeí áûòü íyëeâoé yêaçaòeëü.
Ôyíêöèÿ execv ïpèìeíÿeòcÿ, êoãäa çapaíee íeèçâecòío ÷ècëo
apãyìeíòoâ. Apãyìeíòaìè â ýòoì cëy÷ae ÿâëÿþòcÿ èìÿ ôaéëa è
ìaccèâ còpoê, coäepæaùèx ïepeäaâaeìûe ôaéëy apãyìeíòû.
Ïocëeäíèì ýëeìeíòoì ìaccèâa äoëæeí áûòü íyëeâoé yêaçaòeëü.
Ïpoãpaììa ía ÿçûêe Cè, ïoëy÷aþùaÿ yïpaâëeíèe â peçyëüòaòe
exec, äoëæía èìeòü cëeäyþùèì oápaçoì oïècaííûé âxoä:
void main (argc, argv, envp)
int argc;
char **argv, **envp;
ãäe argc - c÷eò÷èê ÷ècëa apãyìeíòoâ;
argv - ìaccèâ yêaçaòeëeé ía apãyìeíòû, ïpeäcòaâëeííûe â âèäe
cèìâoëüíûx còpoê;
envp - ìaccèâ yêaçaòeëeé còpoê, ïpeäcòaâëÿþùèé coáoé
êoìaíäíyþ cpeäy.
argc äoëæeí áûòü, ïo êpaéíeé ìepe, íe ìeíüøe 1 è argv[0]
äoëæeí coâïaäaòü c èìeíeì èëè ïocëeäíèì êoìïoíeíòoì èìeíè
ôaéëa.
argv ìoæeò íeïocpeäcòâeíío ècïoëüçoâaòücÿ â äpyãoì execv,
ïocêoëüêy argv[argc] paâeí 0.
Kaæäaÿ còpoêa â ìaccèâe, yêaçûâaeìoì envp, cocòoèò èç èìeíè,
çíaêa "=" è çía÷eíèÿ (cèìâoëüíoé còpoêè, çaâepøaeìoé
cèìâoëoì NUL). Maccèâ çaâepøaeòcÿ íyëeâûì yêaçaòeëeì.
Èíòepïpeòaòop êoìaíä sh(1) ïepeäaeò âûçûâaeìoé ïpoãpaììe â
êa÷ecòâe êoìaíäíoé cpeäû èìeía è çía÷eíèÿ êoìaíäíûx
ïepeìeííûx, oáúÿâëeííûx ýêcïopòèpyeìûìè. Cïècoê oáû÷ío
ýêcïopòèpyeìûx èìeí cì. â environ(7). Ïpè âûçoâe ïpoãpaììû
çía÷eíèe envp ïpècâaèâaeòcÿ âíeøíeé ïepeìeííoé environ,
êoòopaÿ ècïoëüçyeòcÿ execv è execl äëÿ ïepeäa÷è êoìaíäíoé
cpeäû ëþáoé ïoäïpoãpaììe äaííoé ïpoãpaììû. Ïepe÷ècëeííûe
íèæe ôyíêöèè ÿâíûì oápaçoì ïepeäaþò êoìaíäíyþ cpeäy:
execle (file, arg0, arg1, ..., argn, 0, environ);
execve (file, argv, environ);
execlp è execvp âûçûâaþòcÿ c òeìè æe apãyìeíòaìè, ÷òo execl
è execv, ío èùyò èìÿ ôaéëa, ïpocìaòpèâaÿ êaòaëoãè òaê æe,
êaê sh(1). Cïècoê êaòaëoãoâ áepeòcÿ èç êoìaíäíoé cpeäû.
exec aâapèéío çaâepøaeòcÿ è âoçâpaùaeò yïpaâëeíèe â còapûé
oápaç ïpoöecca, ecëè âûïoëíÿeòcÿ xoòÿ áû oäío èç cëeäyþùèx
ycëoâèé:
[ENOENT] | Koìïoíeíò èìeíè ôaéëa oápaça ïpoöecca íe
cyùecòâyeò.
|
---|
[ENOTDIR] | Koìïoíeíò ïpeôèêca èìeíè ôaéëa oápaça
ïpoöecca íe ÿâëÿeòcÿ êaòaëoãoì.
|
---|
[EACCES] | Ëèáo íeò paçpeøeíèÿ ía ïoècê â êaòaëoãe èç
ïpeôèêca èìeíè ôaéëa oápaça ïpoöecca.
|
---|
[EACCES] | Ôaéë oápaça ïpoöecca íe ÿâëÿeòcÿ oáû÷íûì.
|
---|
[EACCES] | Heò paçpeøeíèÿ ía âûïoëíeíèe ôaéëa oápaça
ïpoöecca.
|
---|
[ENOEXEC] | Ôaéë oápaça ïpoöecca èìeeò paçpeøeíèe ía
âûïoëíeíèe, ío eão ôopìaò íe coâïaäaeò c
ôopìaòoì oáúeêòíoão ôaéëa.
|
---|
[ETXTBSY] | Hoâûé ôaéë oápaça ïpoöecca ÿâëÿeòcÿ ÷ècòoé
ïpoöeäypoé (paçäeëÿeìûì ceãìeíòoì
èícòpyêöèé), êoòopûé â äaííûé ìoìeíò oòêpûò
ía çaïècü äpyãèì ïpoöeccoì.
|
---|
[ENOMEM] | Hoâûé oápaç ïpoöecca òpeáyeò ïaìÿòè áoëüøe,
÷eì eìy ìoæeò áûòü âûäeëeío â oïepaòèâíoé
ïaìÿòè èëè â oáëacòè câoïèíãa.
|
---|
[E2BIG] | ×ècëo áaéòoâ â cïècêe apãyìeíòâ, ïepeäaâaeìûx
íoâoìy oápaçy, ïpeâûøaeò ïpeäycìoòpeííûé
cècòeìoé ëèìèò â 512 áaéòoâ.
|
---|
[EFAULT] | Äëèía íoâoão ôaéëa oápaça íe coâïaäaeò c
yêaçaííoé â çaãoëoâêe.
|
---|
[EFAULT] | Aäpec, çaäaííûé path, argv èëè envp, âûxoäèò
ça ïpeäeëû ïoëüçoâaòeëücêoão aäpecíoão
ïpocòpaícòâa ïpoöecca.
|
---|
BOÇÂPAÙAEÌOE ÇÍA×EÍÈE
B cëy÷ae ycïeøíoão çaâepøeíèÿ íe ïpoècxoäèò âoçâpaòa
yïpaâëeíèÿ è çía÷eíèÿ â còapûé oápaç ïpoöecca. Èía÷e
yïpaâëeíèe âoçâpaùaeòcÿ â còapûé oápaç, âoçâpaùaeòcÿ
çía÷eíèe -1 è â errno çaíocèòcÿ êoä oøèáêè.
ÑÌ. ÒÀÊÆÅ
exit(3), fork(3), proctl(3), semop(3)
ÇÀÌÅ×ÀÍÈß
exec ìoæeò aâapèéío çaâepøèòücÿ, ecëè oáúeì oïepaòèâíoé
ïaìÿòè ïpeâûøaeò paçìep oáëacòè câoïèíãa (cì. âûøe êoä
oøèáêè ENOMEM). Oäíaêo, ýòo oãpaíè÷eíèe cíèìaeòcÿ
ècïoëüçoâaíèeì cëeäyþùèx âapèaíòoâ âûçoâa proctl(3):
PRHUGEX | Ïoçâoëÿeò âûïoëíÿòü ïpoãpaììy äaæe, ecëè ee
paçìep ïpeâûøaeò paçìep oáëacòè câoïèíãa.
Taêèe ïpoãpaììû äoëæíû ïoìeùaòücÿ â äocòyïíyþ
÷acòü oïepaòèâíoé ïaìÿòè è ýôôeêòèâíûé
ïoëüçoâaòeëücêèé ID ïpoöecca äoëæeí áûòü
ïpèâèëeãèpoâaííûì. Ïpoöecc, âûïoëíÿþùèé
ïpoãpaììy òaêoão paçìepa, áëoêèpyeòcÿ
cècòeìoé oò âûãpyçêè â oáëacòü câoïèíãa.
|
---|
PRNORMX | Çaïpeùaeò ïpoöeccy âûïoëíÿòü ïpoãpaììy
ïoäoáíoão paçìepa. Ýòoò âûçoâ ìoæeò cäeëaòü
ëþáoé ïpoöecc.
|
---|
|
|