|
éíñ
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×;
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. |
|