Home :: International :: Manuals :: Howto :: FAQ :: Man Pages :: Email Login

 
 

 

EXECVE

Section: Linux Programmer's Manual (2)
Updated: 1997-09-03
Index Return to Main Contents
 

̾Á°

execve - ¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë  

½ñ¼°

#include <unistd.h>

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

ÀâÌÀ

execve() ¤Ï¡¢filename ¤Ë¤è¤Ã¤Æ»ØÄꤵ¤ì¤¿¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¡£ filename ¤Ï¡¢¥Ð¥¤¥Ê¥ê¼Â¹Ô·Á¼°¤«¡¢"#! interpreter [arg]" ¤È¤¤¤¦·Á¼°¤Î¹Ô¤Ç»Ï¤Þ¤ë¥¹¥¯¥ê¥×¥È¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¸å¼Ô¤Î¾ì¹ç¡¢interpreter ¤ÏŬÀڤʼ¹ԥե¡¥¤¥ë¤Î¥Ñ¥¹Ì¾¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢ ¤½¤ì¼«¿È¤¬¥¹¥¯¥ê¥×¥È¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤½¤·¤Æ¤½¤ì¤Ï interpreter [arg] filename ¤Î·Á¤Ç¸Æ¤Ó½Ð¤µ¤ì¤ë¡£

argv ¤Ï¿·¤·¤¤¥×¥í¥°¥é¥à¤ËÅϤµ¤ì¤ë°ú¤­¿ôʸ»úÎó¤ÎÇÛÎó¤Ç¤¢¤ë¡£ envp ¤Ïʸ»úÎó¤ÎÇÛÎó¤Ç¤¢¤ê¡¢ÅÁÅýŪ¤Ë key=value ¤Î·Á¼°¤ò ¤·¤Æ¤ª¤ê¡¢¿·¤·¤¤¥×¥í¥°¥é¥à¤Î´Ä¶­ÊÑ¿ô¤È¤·¤ÆÅϤµ¤ì¤ë¡£ argv ¤È envp ¤ÎξÊý¤È¤â NULL ¥Ý¥¤¥ó¥¿¡¼¤Ç½ª¤Ã¤Æ¤¤¤ë ɬÍפ¬¤¢¤ë¡£°ú¤­¿ôÇÛÎó¤È´Ä¶­ÊÑ¿ô¤Ï¸Æ¤Ó½Ð¤µ¤ì¤¿¥×¥í¥°¥é¥à¤Î main ´Ø¿ô¤ò int main(int argc, char *argv[], char *envp[]) ¤Î¤è¤¦¤ËÄêµÁ¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¥¢¥¯¥»¥¹²Äǽ¤Ë¤Ê¤ë¡£

À®¸ù¤·¤¿¾ì¹ç¡¢execve() ¤ÏÊÖ¤é¤Ê¤¤¡£ ¤½¤·¤Æ¡¢¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥»¥¹¤Î text, data, bss, ¥¹¥¿¥Ã¥¯¤Ï¡¢ÆÉ¤ß¹þ¤Þ¤ì ¤¿¥×¥í¥°¥é¥à¤Ë¤è¤Ã¤Æ¾å½ñ¤­¤µ¤ì¤ë¡£ ¸Æ¤Ó½Ð¤µ¤ì¤¿¥×¥í¥°¥é¥à¤Ï¡¢¸Æ¤Ó½Ð¤·¸µ¤Î PID ¤ª¤è¤Ó exec »þ¥¯¥í¡¼¥º(close on exec)¤ÎÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤¹¤Ù¤Æ¤Î ¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤ò·Ñ¾µ¤¹¤ë¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ç¤ÎÊÝα¥·¥°¥Ê¥ë¤Ï²ò½ü¤µ¤ì¤ë¡£¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥°¥é¥à¤Ç ÀßÄꤵ¤ì¤¿¥·¥°¥Ê¥ëÊá³Í»þ¤Îưºî¤Ï¥Ç¥Õ¥©¥ë¥Èưºî¤ËÌᤵ¤ì¤ë¡£ SIGCHLD ¥·¥°¥Ê¥ë¤¬ SIG_IGN ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï SIG_DFL ¤Ë¥ê¥»¥Ã¥È ¤µ¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤¤·¡¢¤µ¤ì¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡£

¤â¤·¸µ¤Î¥×¥í¥°¥é¥à¤¬ ptrace ¤µ¤ì¤Æ¤¤¤ë¤È¡¢execve() ¤¬À®¸ù¤· ¤¿¸å¤Ë¤½¤Î¥×¥í¥°¥é¥à¤Ë SIGTRAP ¤¬Á÷¤é¤ì¤ë¡£

¤â¤· filename ¤Ç»ØÄꤵ¤ì¤¿¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤Ë set-uid ¥Ó¥Ã¥È¤¬ ÀßÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¡¢¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤ÎÍ­¸ú(effective)¥æ¡¼¥¶ ID ¤Ï ¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤Î½êÍ­¼Ô(owner)¤ËÊѹ¹¤µ¤ì¤ë¡£Æ±ÍÍ¤Ë¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤Ë set-gid ¥Ó¥Ã¥È¤¬ÀßÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤ÎÍ­¸ú¥°¥ë¡¼¥× ID¤Ï ¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤Î¥°¥ë¡¼¥×(group)¤ËÊѹ¹¤µ¤ì¤ë¡£

¼Â¹Ô¥Õ¥¡¥¤¥ë¤¬¶¦Í­¥é¥¤¥Ö¥é¥ê¤Î¥¹¥¿¥Ö¤ò´Þ¤ó¤À¥À¥¤¥Ê¥ß¥Ã¥¯¡¦¥ê¥ó¥¯ ¤µ¤ì¤¿ a.out ¼Â¹Ô·Á¼°¤À¤Ã¤¿¾ì¹ç¡¢¼Â¹Ô¤Î³«»Ï»þ¤Ë Linux ¤Î ¥À¥¤¥Ê¥ß¥Ã¥¯¡¦¥ê¥ó¥«¡¼ ld.so(8) ¤¬¸Æ¤Ó½Ð¤·¡¢¶¦Í­¥é¥¤¥Ö¥é¥ê¤ò¥á¥â¥ê¤ËÆÉ¤ß¹þ¤ó¤Ç¥ê¥ó¥¯¤ò¹Ô¤¦¡£

¼Â¹Ô¥Õ¥¡¥¤¥ë¤¬¥À¥¤¥Ê¥ß¥Ã¥¯¡¦¥ê¥ó¥¯¤µ¤ì¤¿ ELF ¼Â¹Ô·Á¼°¤À¤Ã¤¿¾ì¹ç¡¢ PT_INTERP ¥»¥°¥á¥ó¥È¤Ë»ØÄꤵ¤ì¤¿¥¤¥ó¥¿¥×¥ê¥¿¡¼¤¬É¬Í×¤Ê ¶¦Í­¥é¥¤¥Ö¥é¥ê(shared library)¤òÆÉ¤ß¹þ¤à¤Î¤Ë»ÈÍѤµ¤ì¤ë¡£ Ä̾ï»ÈÍѤµ¤ì¤ë¥¤¥ó¥¿¡¼¥×¥ê¥¿¡¼¤Ï Linux libc version 5 ¤ò¥ê¥ó¥¯¤·¤¿¥Ð¥¤¥Ê¥ê ¤Î¾ì¹ç¤Ë¤Ï /lib/ld-linux.so.1 ¤¬¡¢GNU libc version 2 ¤ò¥ê¥ó¥¯¤·¤¿ ¥Ð¥¤¥Ê¥ê¤Î¾ì¹ç¤Ë¤Ï /lib/ld-linux.so.2 ¤¬»ÈÍѤµ¤ì¤ë¡£  

ÊÖ¤êÃÍ

À®¸ù¤¹¤ë¤È execve() ¤ÏÊÖ¤é¤Ê¤¤¡£¥¨¥é¡¼¤Î¾ì¹ç¤Ï -1 ¤òÊÖ¤·¡¢ errno ¤òŬÅö¤ËÀßÄꤹ¤ë¡£  

¥¨¥é¡¼

EACCES
¥Õ¥¡¥¤¥ë¤«¥¹¥¯¥ê¥×¥È¤Î¥¤¥ó¥¿¥×¥ê¥¿¡¼¤¬ÉáÄ̤Υե¡¥¤¥ë¤Ç¤Ê¤¤¡£
EACCES
¥Õ¥¡¥¤¥ë¤«¥¹¥¯¥ê¥×¥È¤Þ¤¿¤Ï ELF ¥¤¥ó¥¿¥×¥ê¥¿¡¼¤Ë¼Â¹Ôµö²Ä(execute permission)¤¬ Í¿¤¨¤é¤ì¤Æ¤¤¤Ê¤¤¤«¡¢É¬Íפʶ¦Í­¥é¥¤¥Ö¥é¥ê¤Þ¤¿¤Ï¥¤¥ó¥¿¥×¥ê¥¿¤¬¸«¤Ä¤«¤é¤Ê¤¤¡£
EPERM
¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤¬ noexec ¤Ç¥Þ¥¦¥ó¥È¤µ¤ì¤Æ¤¤¤ë¡£
EPERM
¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤¬ nosuid ¤Ç¥Þ¥¦¥ó¥È¤µ¤ì¡¢¥Õ¥¡¥¤¥ë¤Ë SUID ¤¢¤ë¤¤¤Ï SGID ¥Ó¥Ã¥È¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¡£
E2BIG
°ú¤­¿ô¥ê¥¹¥È¤¬Â礭²á¤®¤ë¡£
ENOEXEC
¼Â¹Ô¥Õ¥¡¥¤¥ë¤¬Íý²ò¤Ç¤­¤Ê¤¤·Á¼°¤Ç¤¢¤ë¤«¡¢°ã¤¦¥¢¥­¥Æ¥¯¥Á¥ã¡¼¤Î¤â¤Î¤«¡¢ ¤½¤Î¾¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¡¦¥¨¥é¡¼¤Ë¤è¤ê¼Â¹Ô¤¬¤Ç¤­¤Ê¤«¤Ã¤¿¡£
EFAULT
filename ¤¬¥¢¥¯¥»¥¹²Äǽ¤Ê¥¢¥É¥ì¥¹¶õ´Ö¤Î³°¤ò»Ø¤·¤Æ¤¤¤ë¡£
ENAMETOOLONG
filename ¤¬Ä¹²á¤®¤ë¡£
ENOENT
¥Õ¥¡¥¤¥ë filename ¤«¥¹¥¯¥ê¥×¥È¤ä ELF ¤Î¥¤¥ó¥¿¥×¥ê¥¿¡¼¤¬Â¸ºß¤·¤Ê¤¤¡£
ENOMEM
¥«¡¼¥Í¥ë¤Ë½½Ê¬¤Ê¥á¥â¥ê¤¬¤Ê¤¤¡£
ENOTDIR
filename ¤ä¥¹¥¯¥ê¥×¥È¤ä ELF ¤Î¥¤¥ó¥¿¥×¥ê¥¿¡¼¤Î¹½À®Í×ÁǤ¬¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ê¤¤¡£
EACCES
filename ¤ä¥¹¥¯¥ê¥×¥È¤ä ELF ¤Î¥¤¥ó¥¿¥×¥ê¥¿¡¼¤Î¹½À®Í×ÁǤ˸¡º÷µö²Ä(search permission) ¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤Ê¤¤¡£
ELOOP
filename ¤ä¥¹¥¯¥ê¥×¥È¤ä ELF ¤Î¥¤¥ó¥¿¥×¥ê¥¿¡¼¤ò²ò·è¤¹¤ëºÝ¤ËÁø¶ø¤·¤¿ ¥·¥ó¥Ü¥ê¥Ã¥¯¡¦¥ê¥ó¥¯¤¬Â¿²á¤®¤ë¡£
ETXTBSY
¼Â¹Ô¥Õ¥¡¥¤¥ë¤ò½ñ¤­¹þ¤ßÍѤ˥ª¡¼¥×¥ó¤·¤Æ¤¤¤ë¥×¥í¥»¥¹¤¬¤¢¤ë¡£
EIO
I/O ¥¨¥é¡¼¤¬È¯À¸¤·¤¿¡£
ENFILE
¤½¤Î¥·¥¹¥Æ¥à¤Ç¥ª¡¼¥×¥ó¤Ç¤­¤ë¥Õ¥¡¥¤¥ë¿ô¤Î¸Â³¦¤Ëã¤Ã¤·¤¿¡£
EMFILE
¤½¤Î¥×¥í¥»¥¹¤¬¥ª¡¼¥×¥ó¤Ç¤­¤ë¥Õ¥¡¥¤¥ë¿ô¤Î¾å¸Â¤Þ¤Ç´û¤Ë¥ª¡¼¥×¥ó¤·¤Æ¤¤¤ë¡£
EINVAL
ELF ¼Â¹Ô·Á¼°¤ÇÊ£¿ô¤Î PT_INTERP ¥»¥°¥á¥ó¥È¤¬Â¸ºß¤¹¤ë¡£ (¤¹¤Ê¤ï¤ÁÊ£¿ô¤Î¥¤¥ó¥¿¥×¥ê¥¿¡¼¤ò»ØÄꤷ¤¿¡£)
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() ¤Ç¤­¤Ê¤¤¡£

#! ¼Â¹Ô·Á¼°¤Î¥·¥§¥ë¡¦¥¹¥¯¥ê¥×¥È¤Î£±¹ÔÌܤˤϺÇÂç 127 ʸ»ú¤¬µö¤µ¤ì¤Æ¤¤¤ë¡£

Linux ¤Ï¥¹¥¯¥ê¥×¥È¤Î SUID ¥Ó¥Ã¥È¤È SGID ¥Ó¥Ã¥È¤ò̵»ë¤¹¤ë¡£  

´ØÏ¢¹àÌÜ

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


 

Index

̾Á°
½ñ¼°
ÀâÌÀ
ÊÖ¤êÃÍ
¥¨¥é¡¼
½àµò
Ãí°Õ
´ØÏ¢¹àÌÜ

 
 
 
 
Google
  Web Linuxinfor   
 

Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account

Document on this page is part of "Linuxinfor Man Pages in HTML Format: man2". See Index Page for more info about Authorship and Copyright.

1999-2008 Linuxinfor.com. No rights reserved.