ÔÚLinuxµÄÓ¦ÓóÌÐòÀïÃæµ÷ÓÃÎÒµÄshell(ÕâÍæÒ⹦ÄÜʵÔÚ̫ǿ´ó)µÄ°ì·¨ÓкܶàÖÖÒ»°ãÀ´ËµÓÐfork()¡¢exec*()¡¢pipe¡¢system£¨£©ÆäÖÐÓÖÒÔsystem£¨£©
µ÷ÓúÜÉÙ·½±ã£¬ÏÖÔÚ¼ÓÒÔ˵Ã÷¡£
//------------------------------------------------------------------------------------------------------------------------------------------------------
exec*
·½·¨¶þ£º exec( )º¯Êý×å(ת)
ÏÂÃæÎÒÃÇÀ´¿´¿´Ò»¸ö½ø³ÌÈçºÎÀ´Æô¶¯ÁíÒ»¸ö³ÌÐòµÄÖ´ÐС£ÔÚLinuxÖÐҪʹÓÃexecº¯Êý×塣ϵͳµ÷ÓÃexecve£¨£©¶Ôµ±Ç°½ø³Ì½øÐÐÌæ»»£¬Ìæ»»ÕßΪһ¸öÖ¸¶¨µÄ³ÌÐò£¬Æä²ÎÊý°üÀ¨ÎļþÃû£¨filename£©¡¢²ÎÊýÁÐ±í£¨argv£©ÒÔ¼°»·¾³±äÁ¿£¨envp£©¡£execº¯Êý×嵱Ȼ²»Ö¹Ò»¸ö£¬µ«ËüÃÇ´óÖÂÏàͬ£¬ÔÚ LinuxÖУ¬ËüÃÇ·Ö±ðÊÇ£ºexecl£¬execlp£¬execle£¬execv£¬execveºÍexecvp£¬ÏÂÃæÎÒÖ»ÒÔexeclpΪÀý£¬ÆäËüº¯Êý¾¿¾¹ÓëexeclpÓкÎÇø±ð£¬Çëͨ¹ýmanexecÃüÁîÀ´Á˽âËüÃǵľßÌåÇé¿ö¡£
Ò»¸ö½ø³ÌÒ»µ©µ÷ÓÃexecÀຯÊý£¬Ëü±¾Éí¾Í"ËÀÍö"ÁË£¬ÏµÍ³°Ñ´úÂë¶ÎÌæ»»³ÉеijÌÐòµÄ´úÂ룬·ÏÆúÔÓеÄÊý¾Ý¶ÎºÍ¶ÑÕ»¶Î£¬²¢ÎªÐ³ÌÐò·ÖÅäеÄÊý¾Ý¶ÎÓë¶ÑÕ»¶Î£¬Î¨Ò»ÁôÏµģ¬¾ÍÊǽø³ÌºÅ£¬Ò²¾ÍÊÇ˵£¬¶Ôϵͳ¶øÑÔ£¬»¹ÊÇͬһ¸ö½ø³Ì£¬²»¹ýÒѾÊÇÁíÒ»¸ö³ÌÐòÁË¡££¨²»¹ýexecÀຯÊýÖÐÓеϹÔÊÐí¼Ì³Ð»·¾³±äÁ¿Ö®ÀàµÄÐÅÏ¢¡££©
ÄÇôÈç¹ûÎҵijÌÐòÏëÆô¶¯ÁíÒ»³ÌÐòµÄÖ´Ðе«×Ô¼ºÈÔÏë¼ÌÐøÔËÐеϰ£¬Ôõô°ìÄØ£¿ÄǾÍÊǽáºÏforkÓëexecµÄʹÓᣠÏÂÃæÒ»¶Î´úÂëÏÔʾÈçºÎÆô¶¯ÔËÐÐÆäËü³ÌÐò£º
´Ë³ÌÐò´ÓÖն˶ÁÈëÃüÁî²¢Ö´ÐÐÖ®£¬Ö´ÐÐÍê³Éºó£¬¸¸½ø³Ì¼ÌÐøµÈ´ý´ÓÖն˶ÁÈëÃüÁî¡£ÊìϤDOSºÍWINDOWSϵͳµ÷ÓõÄÅóÓÑÒ»¶¨ÖªµÀ
DOS/WINDOWS Ò²ÓÐexecÀຯÊý£¬ÆäʹÓ÷½·¨ÊÇÀàËÆµÄ£¬µ«DOS/WINDOWS»¹ÓÐspawnÀຯÊý£¬ÒòΪDOSÊǵ¥ÈÎÎñµÄϵͳ£¬ËüÖ»Äܽ«"¸¸½ø³Ì"פÁôÔÚ»úÆ÷ÄÚÔÙÖ´ÐÐ"×Ó½ø³Ì"£¬Õâ¾ÍÊÇspawnÀàµÄº¯Êý¡£WIN32ÒѾÊǶàÈÎÎñµÄϵͳÁË£¬µ«»¹±£ÁôÁËspawnÀຯÊý£¬WIN32ÖÐʵÏÖspawnº¯ÊýµÄ·½·¨Í¬Ç°Êö UNIXÖеķ½·¨²î²»¶à£¬¿ªÉè×Ó½ø³Ìºó¸¸½ø³ÌµÈ´ý×Ó½ø³Ì½áÊøºó²Å¼ÌÐøÔËÐС£UNIXÔÚÆäÒ»¿ªÊ¼¾ÍÊǶàÈÎÎñµÄϵͳ£¬ËùÒÔ´ÓºËÐĽǶÈÉϽ²²»ÐèÒªspawnÀຯÊý¡£
/------------------------------------------------------------------------------------------------------------------------------------------------------
system ÊÇÔÚµ¥¶ÀµÄ½ø³ÌÖÐÖ´ÐÐÃüÁÍêÁË»¹»á»Øµ½ÄãµÄ³ÌÐòÖС£
¶øexecº¯ÊýÊÇÖ±½ÓÔÚÄãµÄ½ø³ÌÖÐÖ´ÐÐеijÌÐò£¬ÐµijÌÐò»á°ÑÄãµÄ³ÌÐò¸²¸Ç£¬³ý·Çµ÷Óóö´í£¬·ñÔòÄãÔÙÒ²»Ø²»µ½execºóÃæµÄ´úÂ룬¾ÍÊÇ˵ÄãµÄ³ÌÐò¾Í±ä³ÉÁËexecµ÷ÓõÄÄǸö³ÌÐòÁË.
/------------------------------------------------------------------------------------------------------------------------------------------------------
/------------------------------------------------------------------------------------------------------------------------------------------------------
³ÌÐòÀïµ÷ÓÃÁË2 ¸öLinux ³£ÓõÄϵͳÃüÁechoºÍenv¡£echo»á°ÑºóÃæ¸úµÄÃüÁîÐвÎÊýÔ·â²»¶¯µÄ´òÓ¡³öÀ´£¬envÓÃÀ´ÁгöËùÓл·¾³±äÁ¿¡£
ÓÉÓÚ¸÷¸ö×Ó½ø³ÌÖ´ÐеÄ˳ÐòÎÞ·¨¿ØÖÆ£¬ËùÒÔÓпÉÄܳöÏÖÒ»¸ö±È½Ï»ìÂÒµÄÊä³ö¨C¸÷×Ó½ø³Ì´òÓ¡µÄ½á¹û½»ÔÓÔÚÒ»Æð£¬¶ø²»ÊÇÑϸñ°´ÕÕ³ÌÐòÖÐÁгöµÄ´ÎÐò¡£
×î³£¼ûµÄ´íÎó£º
´ó¼ÒÔÚÆ½Ê±µÄ±à³ÌÖУ¬Èç¹ûÓõ½ÁËexec º¯Êý×壬һ¶¨¼ÇµÃÒª¼Ó´íÎóÅжÏÓï¾ä¡£ÒòΪÓëÆäËûϵͳµ÷ÓÃ±ÈÆðÀ´£¬execºÜÈÝÒ×ÊÜÉË£¬±»Ö´ÐÐÎļþµÄλÖã¬È¨Ï޵ȺܶàÒòËØ¶¼Äܵ¼Ö¸õ÷ÓõÄʧ°Ü¡£
×î³£¼ûµÄ´íÎóÊÇ£º
1£©ÕÒ²»µ½Îļþ»ò·¾¶£¬´Ëʱerrno ±»ÉèÖÃΪENOENT£»
2£©Êý×éargvºÍenvpÍü¼ÇÓÃNULL½áÊø£¬´Ëʱerrno±»ÉèÖÃΪEFAULT£»
3£©Ã»ÓжÔÒªÖ´ÐÐÎļþµÄÔËÐÐȨÏÞ£¬´Ëʱerrno±»ÉèÖÃΪEACCES¡£