£VcgLinuxÁªÃË E2BIG ²ÎÊýÊý×é¹ý´óVcgLinuxÁªÃË ENOEXEC ÎÞ·¨ÅжÏÓûÖ´ÐÐÎļþµÄÖ´ÐÐÎļþ¸ñʽ£¬ÓпÉÄÜÊǸñʽ´íÎó»òÎÞ·¨ÔÚ´ËÆ½Ì¨Ö´ÐС£VcgLinuxÁªÃË EFAULT ²ÎÊýfilenameËùÖ¸µÄ×Ö·û´®µØÖ·³¬³ö¿É´æÈ¡¿Õ¼ä·¶Î§¡£VcgLinuxÁªÃË ENAMETOOLONG ²ÎÊýfilenameËùÖ¸µÄ×Ö·û´®Ì«³¤¡£VcgLinuxÁªÃË ENOENT ²ÎÊýfilename×Ö·û´®ËùÖ¸¶¨µÄÎļþ²»´æÔÚ¡£VcgLinuxÁªÃË ENOMEM ºËÐÄÄÚ´æ²»×ãVcgLinuxÁªÃË ENOTDIR ²ÎÊýfilename×Ö·û´®Ëù°üº¬µÄĿ¼·¾¶²¢·ÇÓÐЧĿ¼VcgLinuxÁªÃË EACCES ²ÎÊýfilename×Ö·û´®Ëù°üº¬µÄĿ¼·¾¶ÎÞ·¨´æÈ¡£¬È¨ÏÞ²»×ãVcgLinuxÁªÃË ELOOP ¹ý¶àµÄ·ûºÅÁ¬½ÓVcgLinuxÁªÃË ETXTBUSY ÓûÖ´ÐеÄÎļþÒѱ»ÆäËû½ø³Ì´ò¿ª¶øÇÒÕý°ÑÊý¾ÝдÈë¸ÃÎļþÖÐVcgLinuxÁªÃË EIO I/O ´æÈ¡´íÎóVcgLinuxÁªÃË ENFILE ÒѴﵽϵͳËùÔÊÐíµÄ´ò¿ªÎļþ×ÜÊý¡£VcgLinuxÁªÃË EMFILE ÒѴﵽϵͳËùÔÊÐíµ¥Ò»½ø³ÌËùÄÜ´ò¿ªµÄÎļþ×ÜÊý¡£VcgLinuxÁªÃË EINVAL ÓûÖ´ÐÐÎļþµÄELFÖ´Ðиñʽ²»Ö»Ò»¸öPT_INTERP½ÚÇøVcgLinuxÁªÃË EISDIR ELF·ÒëÆ÷ΪһĿ¼VcgLinuxÁªÃË ELIBBAD ELF·ÒëÆ÷ÓÐÎÊÌâ¡£VcgLinuxÁªÃË
|
·¶Àý | #include<unistd.h>VcgLinuxÁªÃË main()VcgLinuxÁªÃË {VcgLinuxÁªÃË char * argv[ ]={¡°ls¡±,¡±-al¡±,¡±/etc/passwd¡±,(char *)0};VcgLinuxÁªÃË char * envp[ ]={¡°PATH=/bin¡±,0}VcgLinuxÁªÃË execve(¡°/bin/ls¡±,argv,envp);VcgLinuxÁªÃË }VcgLinuxÁªÃË
|
Ö´ÐÐ | -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwdVcgLinuxÁªÃË
|
| ¡¡ |
VcgLinuxÁªÃË
| VcgLinuxÁªÃË execvp£¨Ö´ÐÐÎļþ£© |
Ïà¹Øº¯Êý | fork£¬execl£¬execle£¬execlp£¬execv£¬execveVcgLinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>VcgLinuxÁªÃË
|
¶¨Ò庯Êý | int execvp(const char *file ,char * const argv []);VcgLinuxÁªÃË
|
º¯Êý˵Ã÷ | execvp()»á´ÓPATH »·¾³±äÁ¿ËùÖ¸µÄĿ¼ÖвéÕÒ·ûºÏ²ÎÊýfile µÄÎļþÃû£¬ÕÒµ½ºó±ãÖ´ÐиÃÎļþ£¬È»ºó½«µÚ¶þ¸ö²ÎÊýargv´«¸ø¸ÃÓûÖ´ÐеÄÎļþ¡£VcgLinuxÁªÃË
|
·µ»ØÖµ | Èç¹ûÖ´Ðгɹ¦Ôòº¯Êý²»»á·µ»Ø£¬Ö´ÐÐʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔÒò´æÓÚerrnoÖС£VcgLinuxÁªÃË
|
´íÎó´úÂë | Çë²Î¿¼execve£¨£©¡£VcgLinuxÁªÃË
|
·¶Àý | /*ÇëÓëexeclp£¨£©·¶Àý¶ÔÕÕ*/VcgLinuxÁªÃË #include<unistd.h>VcgLinuxÁªÃË main()VcgLinuxÁªÃË {VcgLinuxÁªÃË char * argv[ ] ={ ¡°ls¡±,¡±-al¡±,¡±/etc/passwd¡±,0};VcgLinuxÁªÃË execvp(¡°ls¡±,argv);VcgLinuxÁªÃË }VcgLinuxÁªÃË
|
Ö´ÐÐ | -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwdVcgLinuxÁªÃË
|
| ¡¡ |
VcgLinuxÁªÃË
| VcgLinuxÁªÃË exit£¨Õý³£½áÊø½ø³Ì£© |
Ïà¹Øº¯Êý | _exit£¬atexit£¬on_exitVcgLinuxÁªÃË
|
±íÍ·Îļþ | #include<stdlib.h>VcgLinuxÁªÃË
|
¶¨Ò庯Êý | void exit(int status);VcgLinuxÁªÃË
|
º¯Êý˵Ã÷ | exit()ÓÃÀ´Õý³£ÖÕ½áĿǰ½ø³ÌµÄÖ´ÐУ¬²¢°Ñ²ÎÊýstatus·µ»Ø¸ø¸¸½ø³Ì£¬¶ø½ø³ÌËùÓеĻº³åÇøÊý¾Ý»á×Ô¶¯Ð´»Ø²¢¹Ø±Õδ¹Ø±ÕµÄÎļþ¡£VcgLinuxÁªÃË
|
·µ»ØÖµ | VcgLinuxÁªÃË
|
·¶Àý | ²Î¿¼wait£¨£©VcgLinuxÁªÃË
|
| ¡¡ |
VcgLinuxÁªÃË _ | VcgLinuxÁªÃË exit£¨½áÊø½ø³ÌÖ´ÐУ© |
Ïà¹Øº¯Êý | exit£¬wait£¬abortVcgLinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>VcgLinuxÁªÃË
|
¶¨Ò庯Êý | void _exit(int status);VcgLinuxÁªÃË
|
º¯Êý˵Ã÷ | _exit()ÓÃÀ´Á¢¿Ì½áÊøÄ¿Ç°½ø³ÌµÄÖ´ÐУ¬²¢°Ñ²ÎÊýstatus·µ»Ø¸ø¸¸½ø³Ì£¬²¢¹Ø±Õδ¹Ø±ÕµÄÎļþ¡£´Ëº¯Êýµ÷Óú󲻻᷵»Ø£¬²¢ÇһᴫµÝSIGCHLDÐźŸø¸¸½ø³Ì£¬¸¸½ø³Ì¿ÉÒÔÓÉwaitº¯ÊýÈ¡µÃ×Ó½ø³Ì½áÊø×´Ì¬¡£VcgLinuxÁªÃË
|
·µ»ØÖµ | VcgLinuxÁªÃË
|
¸½¼Ó˵Ã÷ | _exit£¨£©²»»á´¦Àí±ê×¼I/O »º³åÇø£¬ÈçÒª¸üлº³åÇøÇëʹÓÃexit£¨£©¡£VcgLinuxÁªÃË
|
| ¡¡ |
VcgLinuxÁªÃË
| VcgLinuxÁªÃË vfork£¨½¨Á¢Ò»¸öеĽø³Ì£© |
Ïà¹Øº¯Êý | wait£¬execveVcgLinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>VcgLinuxÁªÃË
|
¶¨Ò庯Êý | pid_t vfork(void);VcgLinuxÁªÃË
|
º¯Êý˵Ã÷ | vfork()»á²úÉúÒ»¸öеÄ×Ó½ø³Ì£¬Æä×Ó½ø³Ì»á¸´ÖƸ¸½ø³ÌµÄÊý¾ÝÓë¶ÑÕ»¿Õ¼ä£¬²¢¼Ì³Ð¸¸½ø³ÌµÄÓû§´úÂ룬×é´úÂ룬»·¾³±äÁ¿¡¢ÒÑ´ò¿ªµÄÎļþ´úÂë¡¢¹¤×÷Ŀ¼ºÍ×ÊÔ´ÏÞÖÆµÈ¡£Linux ʹÓÃcopy-on-write(COW)¼¼Êõ£¬Ö»Óе±ÆäÖÐÒ»½ø³ÌÊÔͼÐÞ¸ÄÓû¸´ÖƵĿռäʱ²Å»á×öÕæÕýµÄ¸´Öƶ¯×÷£¬ÓÉÓÚÕâЩ¼Ì³ÐµÄÐÅÏ¢ÊǸ´ÖƶøÀ´£¬²¢·ÇÖ¸ÏàͬµÄÄÚ´æ¿Õ¼ä£¬Òò´Ë×Ó½ø³Ì¶ÔÕâЩ±äÁ¿µÄÐ޸ĺ͸¸½ø³Ì²¢²»»áͬ²½¡£´ËÍ⣬×Ó½ø³Ì²»»á¼Ì³Ð¸¸½ø³ÌµÄÎļþËø¶¨ºÍδ´¦ÀíµÄÐźš£×¢Ò⣬Linux²»±£Ö¤×Ó½ø³Ì»á±È¸¸½ø³ÌÏÈÖ´ÐлòÍíÖ´ÐУ¬Òò´Ë±àд³ÌÐòʱҪÁôÒâVcgLinuxÁªÃË
|
ËÀËø»ò¾ºÕùÌõ¼þµÄ·¢Éú¡£ | VcgLinuxÁªÃË
|
·µ»ØÖµ | Èç¹ûvfork()³É¹¦ÔòÔÚ¸¸½ø³Ì»á·µ»ØÐ½¨Á¢µÄ×Ó½ø³Ì´úÂë(PID)£¬¶øÔÚн¨Á¢µÄ×Ó½ø³ÌÖÐÔò·µ»Ø0¡£Èç¹ûvfork ʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔÒò´æÓÚerrnoÖС£VcgLinuxÁªÃË
|
´íÎó´úÂë | EAGAIN ÄÚ´æ²»×ã¡£ENOMEM ÄÚ´æ²»×㣬ÎÞ·¨ÅäÖúËÐÄËùÐèµÄÊý¾Ý½á¹¹¿Õ¼ä¡£VcgLinuxÁªÃË
|
·¶Àý | #include<unistd.h>VcgLinuxÁªÃË main()VcgLinuxÁªÃË {VcgLinuxÁªÃË if(vfork() = =0)VcgLinuxÁªÃË {VcgLinuxÁªÃË printf(¡°This is the child processn¡±);VcgLinuxÁªÃË }else{VcgLinuxÁªÃË printf(¡°This is the parent processn¡±);VcgLinuxÁªÃË }VcgLinuxÁªÃË }VcgLinuxÁªÃË
|
Ö´ÐÐ | this is the parent processVcgLinuxÁªÃË this is the child processVcgLinuxÁªÃË
|
| ¡¡ |
VcgLinuxÁªÃË
| VcgLinuxÁªÃË getpgid£¨È¡µÃ½ø³Ì×éʶ±ðÂ룩 |
Ïà¹Øº¯Êý | setpgid£¬setpgrp£
|
|
|