EXECVE

Section: Linux Programmer's Manual (2)
Updated: 1997³â 11¿ù 3ÀÏ
Index HOME
 

À̸§

execve - ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù.  

»ç¿ë¹ý

#include <unistd.h>

int execve (const char *filename, char *const argv [], char *const envp[]);  

¼³¸í

execve()´Â ÆÄÀÏ¸í¿¡ ÀÇÇØ ÁöÁ¤µÈ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ÆÄÀϸíÀº ¹ÙÀ̳ʸ®½ÇÇàÀ̳ª ½ºÅ©¸³Æ®ÀÌ¾î ¾ß¸¸ÇÑ´Ù. ÈÄÀÚÀÇ °æ¿ì, interpreter´Â ½ºÅ©¸³Æ® ÀÚ½ÅÀÌ ¾Æ´Ñ ½ÇÇàÀ» À§ÇÑ À¯È¿ÇÑ °æ·Î¸íÀ̾î¾ß¸¸ ÇÑ´Ù. argv´Â »õ·Î¿î ÇÁ·Î±×·¥Àº Åë°úÇÏ´Â Àμö ¹®ÀÚ¿­ÀÇ ¹è¿­ÀÌ´Ù. envp´Â ÁøºÎÇϰԵµ key=valueÇüÅÂÀÇ ¹®ÀÚ¿­ ¹è¿­ÀÌ´Ù. ±×°ÍÀº »õ·Î¿î ÇÁ·Î±×·¥À¸·Î ȯ°æÃ³·³ Àü´ÞµÈ´Ù. argv¿Í envp´Â ¸ðµÎ nullÆ÷ÀÎÅÍ¿¡ ÀÇÇØ Á¾·áµÇ ¾î¾ß¸¸ ÇÑ´Ù. Àμö º¤ÅÍ¿Í È¯°æÀº È£ÃâµÈ ÇÁ·Î±×·¥ÀÇ mainÇÔ¼ö¿¡ ÀÇÇØ Á¢±ÙµÉ ¼ö ÀÖ´Ù. ±×¶§ int main(int argc, char *argv[], char *envp[])¿Í °°ÀÌ Á¤ÀÇ µÈ´Ù. execve()´Â ¼º°øÀûÀ¸·Î ¹ÝȯÇÏÁö ¾Ê´Â´Ù.±×¸®°í È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ ÅØ½ºÆ®, µ¥ÀÌŸ, bss¿Í ½ºÅÃÀº ·ÎµåµÈ ÇÁ·Î±×·¥¿¡ ÀÇÇØ µ¤¾î¾²±â µÈ´Ù. ÇÁ·Î±×·¥Àº È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ PID¿Í ¸ðµç exec¿¡ ´ÝÈ÷°Ô ¼³Á¤ÇÏÁö ¾ÊÀº ¿­¸° ÆÄÀÏ µð½ºÅ©¸³Å͸¦ »ó¼ÓÇÏ°Ô ÇÑ´Ù. ¸ðµç ½Ã±×³ÎÀº È£Ãâ ÇÁ·Î¼¼½º°¡ ±âº»¼³Á¤À¸·Î Àç¼³Á¤ µÇ´Â °Í¿¡ ÀÇÇØ ¼³Á¤µÈ´Ù. ÇöÀç ÇÁ·Î±×·¥ÀÌ ÃßÀûµÇ¾îÁö¸é, SIGTRAP´Â execve()ÈÄ¿¡ º¸³»Áö°Ô µÈ´Ù. set-uid ºñÆ®°¡ ÆÄÀÏ¸í¿¡ ÀÇÇØ ÁöÁ¤µÈ ÇÁ·Î±×·¥ ÆÄÀÏÀ» ¼³Á¤ÇÑ´Ù¸é È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ À¯È¿ÇÑ »ç¿ëÀÚ ID´Â ÇÁ·Î±×·¥ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚ°¡ ¹Ù²ï´Ù. ºñ½ÁÇϰÔ, ÇÁ·Î±×·¥ ÆÄÀÏÀÇ set-uidºñÆ®°¡ ¼³Á¤µÉ¶§, È£Ãâ ÇÁ·Î¼¼½ºÀÇ À¯È¿ÇÑ ±×·ì ID´Â ÇÁ·Î±×·¥ ÆÄÀÏÀÇ ±×·ìÀ¸·Î ¼³Á¤µÈ´Ù.  

¹Ýȯ°ª

¼º°ø½Ã, execve()´Â ¹ÝȯµÇÁö ¾Ê°í, ¿¡·¯½Ã -1ÀÌ ¹ÝȯµÇ°í, errno ´Â ÀûÀýÈ÷ ¼³Á¤µÈ´Ù.  

¿¡·¯

EACCES
ÆÄÀÏÀ̳ª ½ºÅ©¸³Æ® ÇØ¼®±â´Â Á¤±ÔÆÄÀÏÀÌ ¾Æ´Ï´Ù.
EACCES
½ÇÇà ±ÇÇÑÀº ÆÄÀÌÀ̳ª ½ºÅ©¸³Æ® ÇØ¼®±â¿¡¼­ °ÅºÎµÆ´Ù.
EACCES
ÆÄÀÏ ½Ã½ºÅÛÀº noexec ¿¡ ¸¶¿îÆ®µÆ´Ù.
EPERM
ÆÄÀϽýºÅÛÀº »ç¿ëÀÚ°¡ ½´ÆÛÀ¯Àú°¡ ¾Æ´Ñ nosuid ¿¡ ¸¶¿îÆ®µÆ°Å³ª, ÆÄÀÏÀÌ SUID³ª SGIDºñÆ® ¼³Á¤À» °®´Â´Ù.
EPERM
ÇÁ·Î¼¼½º°¡ ÃßÀûµÈ´Ù.
E2BIG
Àμö¸®½ºÆ®°¡ ³Ê¹« ±æ´Ù.
ENOEXEC
½ÇÇàÀÌ À߸øµÈ ¾ÆÅ°ÅØÃ³Æ÷¸ËÀ» ÀÎÁöÇϰųª ¸î°³ÀÇ ½ÇÇàµÉ ¼ö ¾øÀ½À» ÀǹÌÇÏ´Â ´Ù¸¥ Æ÷¸Ë¿¡·¯¸¦ °®´Â´Ù.
EFAULT
ÆÄÀ̸í ÀÌ ´ç½ÅÀÌ Á¢±Ù °¡´ÉÇÑ ÁÖ¼Ò°ø°£ ¹ÛÀ» °¡¸®Å²´Ù.
ENAMETOOLONG
ÆÄÀϸí ÀÌ ³Ê¹«±æ´Ù.
ENOENT
ÆÄÀϸí À̳ª ½ºÅ©¸³Æ®, ELFÇØ¼®±â°¡ ¾ø´Ù.
ENOMEM
Ä¿³Î ¸Þ¸ð¸®°¡ Àû´Ù.
ENOTDIR
A component of the path prefix of ÆÄÀÏ¸í °æ·ÎÀÇ ±¸¼ºÀÌ ½ºÅ©¸³Æ®,ELFÇØ¼®±â°¡ µð·ºÅ丮°¡ ¾Æ´Ï´Ù.
EACCES
ã´Â ±ÇÇÑÀÌ ÆÄÀϸí À̳ª ½ºÅ©¸³Æ® ÇØ¼®±âÀÇ À̸§ÀÇ °æ·Î¿¡ ±¸¼ºÀ» °ÅºÎÇÑ´Ù.
ELOOP
³Ê¹« ¸¹Àº ½Éº¼¸¯ ¸µÅ©°¡ ÀÖ´Ù.
ETXTBUSY
½ÇÇàÀÌ ÇϳªÀÌ»óÀÇ ÇÁ·Î¼¼½º¿¡ ÀÇÇÑ ±â·ÏÀ» À§ÇØ ¿­·È´Ù.
EIO
ÀÔÃâ·Â ¿¡·¯.
ENFILE
ÆÄÀÏÀÇ ÃѰ¹¼ö Á¦ÇÑ¿¡ ´Ù´Ù¶ú´Ù.
EMFILE
ÇÁ·Î¼¼½º°¡ ÆÄÀÏ¿­±â ÃÖ´ë°ª¿¡ °É·È´Ù.
EISDIR
ELFÇØ¼®±â°¡ µð·ºÅ丮ÀÌ´Ù.
ELIBBAD
ELFÇØ¼®±â°¡ Æ÷¸ËÀ» ÀνÄÇÒ ¼ö ¾ø´Ù.
 

ȣȯ

SVr4, SVID, X/OPEN, BSD 4.3. POSIXÀº #!½ÇÇàÀ» ¹®¼­È­ ÇÏÁö¾Ê¾ÒÁö¸¸, ±× ¿Ü¿¡´Â ȣȯ¼ºÀÌ ÀÖ´Ù. SVr4´Â Ãß°¡ÀûÀÎ ¿¡·¯»óÅ EAGAIN, EINTR, ELIBACC, ENOLINK, EMULTIHOP¸¦ ¹®¼­È­Çß´Ù; POSIXÀº ETXTBSY, EPERM, EFAULT, ELOOP, EIO, ENFILE, EMFILE, EINVAL, EISDIR ,ELIBBAD ¿¡·¯»óŸ¦ ¹®¼­È­ÇÏÁö ¾Ê¾Ò´Ù.  

ÁÖÀÇ

SUID¿Í SGID ÇÁ·Î¼¼½ºµéÀº SUID ³ª SGID¸¦ ptrace()d¾Ê°Ô ÇÒ ¼ö ÀÖ´Ù. 127¹®ÀÚ ÃÖ´ë±æÀÌ´Â #! ½ÇÇà ½© ½ºÅ©¸³Æ®¿¡¼­ ùÇàÀ» Çã°¡ÇÑ´Ù. ¸®´ª½º´Â ½ºÅ©¸³Æ®ÀÇ SUID¿Í SGIDºñÆ®¸¦ ¹«½ÃÇÑ´Ù.  

°ü·Ã Ç׸ñ

chmod(2), fork(2), execl(3), environ(5), ld.so(8)  

¿ªÀÚ

ASPLINUX<man@asp-linux.co.kr>, 2000³â 7¿ù 29ÀÏ


 

Index

À̸§
»ç¿ë¹ý
¼³¸í
¹Ýȯ°ª
¿¡·¯
ȣȯ
ÁÖÀÇ
°ü·Ã Ç׸ñ
¿ªÀÚ