Server for Information Technologies óÅÒ×ÅÒ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ
ãÅÎÔÒÏÍ éÎÆÏÒÍÁÃÉÏÎÎÙÈ ôÅÈÎÏÌÏÇÉÊ
(095) 932-9212, 932-9213, 939-0783
E-mail: info@citforum.ru
óÅÒ×ÅÒ ÓÏÄÅÒÖÉÔ ÍÏÒÅ(!) ÁÎÁÌÉÔÉÞÅÓËÏÊ ÉÎÆÏÒÍÁÃÉÉ CIT Forum CD-ROM

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.
Comments: info@citmgu.ru
Designed by Andrey Novikov
Copyright © CIT