ÔÚ Linux ϵͳÖУ¬½ø³Ì¹ÜÀíÊÇÒ»ÏîÖÁ¹ØÖØÒªµÄ¼¼ÄÜ£¬¶ø`exec` ϵÁк¯ÊýÔòÊǽø³Ì¹ÜÀíÖеÄÒ»¸öºËÐŤ¾ß£¬ËüÔÊÐí³ÌÐòÔÚÖ´Ðйý³ÌÖÐÌæ»»µ±Ç°µÄ½ø³ÌÓ³Ïñ£¬´Ó¶øÆô¶¯ÐµijÌÐò
±¾ÎĽ«ÉîÈë̽ÌÖLinux `exec` Æô¶¯µÄ»úÖÆ¡¢Ó÷¨¼°ÆäÔÚʵ¼ÊÓ¦ÓÃÖеÄÓÅÊÆ£¬Ö¼ÔÚ°ïÖú¶ÁÕßÕÆÎÕÕâÒ»¸ßÐ§ÕÆ¿Ø½ø³ÌµÄÒÕÊõ
Ò»¡¢`exec` ϵÁк¯Êý¼ò½é `exec` ϵÁк¯ÊýÊÇ POSIX ±ê×¼µÄÒ»²¿·Ö£¬Ö÷ÒªÓÃÓÚÔÚµ±Ç°½ø³ÌÖÐÖ´ÐÐÒ»¸öеijÌÐò
Ö´ÐÐ `exec` ºó£¬µ±Ç°½ø³ÌµÄ´úÂë¶Î¡¢Êý¾Ý¶Î¡¢¶ÑÕ»µÈ¶¼»á±»Ð³ÌÐòÌæ»»£¬µ«½ø³ÌID£¨PID£©±£³Ö²»±ä
ÕâÒâζ×Å£¬´ÓÍⲿ¿´£¬Õâ¸ö½ø³ÌËÆºõ¡°±äÉí¡±³ÉÁËÒ»¸öȫеijÌÐò£¬¶øÊµ¼ÊÉÏ£¬ËüÖ»ÊÇÄÚ²¿ÄÚÈݱ»Ìæ»»ÁË
`exec` ϵÁк¯Êý°üÀ¨¶à¸ö±äÌ壬Èç`execl()`,`execle()`,`execlp()`,`execv()`,`execve()`,`execvp()` µÈ£¬ËüÃǵÄÖ÷񻂿±ðÔÚÓÚ²ÎÊý´«µÝµÄ·½Ê½ºÍÊÇ·ñÖ§³Ö»·¾³±äÁ¿µÄÖ±½ÓÉèÖÃ
ÆäÖУ¬`execve()` ÊÇ×î»ù´¡¡¢×îÁé»îµÄÒ»¸ö£¬ËüÖ±½Ó½ÓÊÕ³ÌÐò·¾¶¡¢²ÎÊýÁбíºÍ»·¾³±äÁ¿Êý×飬ÊÇÄں˲ãÃæÊµÏÖ`exec` ¹¦ÄܵĺËÐĽӿÚ
¶þ¡¢`exec` Æô¶¯µÄ¹¤×÷ÔÀí Àí½â `exec` Æô¶¯µÄ¹¤×÷ÔÀí£¬ÐèÒªÉîÈëµ½ Linux Äں˵IJã´Î
µ±Ò»¸ö½ø³Ìµ÷Óà `exec` ϵÁк¯Êýʱ£¬»á´¥·¢Ò»ÏµÁи´ÔӵIJÙ×÷£¬Ö÷Òª°üÀ¨ÒÔϼ¸¸ö²½Ö裺 1.¼ÓÔØÐ³ÌÐò£ºÊ×ÏÈ£¬ÏµÍ³»á¸ù¾ÝÌṩµÄ³ÌÐò·¾¶£¬Í¨¹ýÎļþϵͳÕÒµ½¶ÔÓ¦µÄ¿ÉÖ´ÐÐÎļþ£¬²¢¶ÁÈ¡ÆäÍ·²¿ÐÅÏ¢£¬ÒÔÈ·¶¨ÎļþµÄÀàÐÍ£¨Èç ELF ¸ñʽ£©
2.´´½¨ÐµĵØÖ·¿Õ¼ä£ºÎªÁ˰²È«µØÌæ»»µ±Ç°½ø³ÌµÄÄÚÈÝ£¬ÏµÍ³»áΪгÌÐò´´½¨Ò»¸öеĵØÖ·¿Õ¼ä£¬°üÀ¨´úÂë¶Î¡¢Êý¾Ý¶Î¡¢¶ÑºÍÕ»
3.Ó³Éä¿ÉÖ´ÐÐÎļþ£º½«Ð³ÌÐòµÄ´úÂëºÍÊý¾Ý¼ÓÔØµ½ÐµĵØÖ·¿Õ¼äÖУ¬ÕâÒ»²½ÖèÉæ¼°ÎļþµÄ¶ÁÈ¡ºÍÄÚ´æÓ³Éä»úÖÆµÄʹÓÃ
4.ÉèÖòÎÊýºÍ»·¾³±äÁ¿£º½«Óû§ÌṩµÄ²ÎÊýÁбíºÍ»·¾³±äÁ¿Êý×é´«µÝ¸øÐ³ÌÐò£¬ÕâЩÐÅÏ¢¶ÔÓÚгÌÐòµÄÕýÈ·ÔËÐÐÖÁ¹ØÖØÒª
5.Ö´ÐÐгÌÐò£º×îºó£¬ÏµÍ³µ÷Óà exec µÄʵ¼ÊÖ´Ðе㣬¼´ CPU ¿ªÊ¼Ö´ÐÐгÌÐòµÄÖ¸Áî
´Ëʱ£¬¾É³ÌÐòµÄÉÏÏÂÎÄ£¨°üÀ¨¶ÑÕ»¡¢¼Ä´æÆ÷״̬µÈ£©±»ÍêÈ«¶ªÆú£¬Ð³ÌÐò´ÓËüµÄÈë¿Úµã£¨Í¨³£ÊÇ `main` º¯Êý£©¿ªÊ¼Ö´ÐÐ
Èý¡¢`exec` Æô¶¯µÄÓ¦Óó¡¾° `exec` Æô¶¯ÒòÆä¸ßЧºÍÁé»îµÄÌØÐÔ£¬ÔÚ¶àÖÖÓ¦Óó¡¾°Öз¢»Ó׏ؼü×÷Ó㺠1.½Å±¾Óë³ÌÐòµÄÇŽӣºÔÚ Shell ½Å±¾ÖУ¬`exec` ³£ÓÃÓÚÆô¶¯Ò»¸ö³ÌÐò²¢Ìæ»»µ±Ç°µÄ Shell ½ø³Ì£¬ÕâÑù×ö¿ÉÒÔ±ÜÃâ´´½¨¶îÍâµÄ½ø³Ì£¬½Úʡϵͳ×ÊÔ´
2.ÊØ»¤½ø³ÌµÄ´´½¨£ºÐí¶àÊØ»¤½ø³Ì£¨ºǫ́·þÎñ£©ÔÚ³õʼ»¯Íê³Éºó£¬»áʹÓÃ`exec` Æô¶¯Êµ¼ÊµÄ·þÎñ³ÌÐò£¬ÒÔÈ·±£·þÎñ½ø³ÌÒÔ×îСµÄ¿ªÏúÔËÐÐ
3.³ÌÐòµÄÖØ¶¨ÏòÓëÌæ»»£ºÔÚijЩÇé¿öÏ£¬Ò»¸ö³ÌÐò¿ÉÄÜÐèÒª¸ù¾ÝÌõ¼þÖ´Ðв»Í¬µÄÈÎÎñ£¬Õâʱ¿ÉÒÔʹÓÃ`exec` À´Æô¶¯²»Í¬µÄ×Ó³ÌÐò£¬ÊµÏÖÁ÷³ÌµÄ¶¯Ì¬µ÷Õû
4.ÈÝÆ÷¼¼ÊõµÄ»ùʯ£ºÔÚ Docker µÈÈÝÆ÷¼¼ÊõÖУ¬ÈÝÆ÷Æô¶¯Ê±Í¨³£»áͨ¹ý `exec` ϵÁк¯Êý¼ÓÔØÈÝÆ÷ÄÚµÄÖ÷½ø³Ì£¬´Ó¶øÈ·±£ÈÝÆ÷»·¾³µÄ¸ôÀëÐԺͰ²È«ÐÔ
ËÄ¡¢`exec` Æô¶¯µÄÓÅÊÆÓëÌôÕ½ ÓÅÊÆ£º - ×ÊԴЧÂÊ£ºÍ¨¹ýÖ±½ÓÌæ»»½ø³ÌÓ³Ïñ¶ø·Ç´´½¨Ð½ø³Ì£¬`exec` ¿ÉÒÔÏÔÖø¼õÉÙÄÚ´æºÍ CPU µÄ¿ªÏú£¬Ìá¸ßϵͳ×ÊÔ´µÄÀûÓÃÂÊ
- ½ø³Ì¿ØÖÆ£ºexec ÔÊÐí¸¸½ø³ÌÁé»îµØ¿ØÖÆ×Ó½ø³ÌµÄÖ´ÐУ¬ÊÇʵÏÖ½ø³Ì¼äͨÐÅ£¨IPC£©ºÍÈÎÎñµ÷¶ÈµÄÖØÒªÊÖ¶Î
- °²È«ÐÔ£ºÍ¨¹ý¾«È·¿ØÖÆ»·¾³±äÁ¿ºÍ²ÎÊý£¬exec ¿ÉÒÔÔöÇ¿³ÌÐòÔËÐеݲȫÐÔ£¬±ÜÃâDZÔڵݲȫ©¶´
ÌôÕ½£º - ´íÎó´¦Àí£ºÓÉÓÚ exec µ÷Óóɹ¦ºó²»»á·µ»Ø£¬Òò´Ë´íÎó´¦Àí±äµÃ¸´ÔÓ
ͨ³££¬ÐèҪͨ¹ý¼ä½Óµ÷Óã¨ÈçÏÈ fork ÔÙ exec£©À´´¦Àíʧ°ÜÇé¿ö
- ×ÊÔ´¹ÜÀí£ºÔÚÖ´ÐÐ exec ǰ£¬±ØÐëÈ·±£ËùÓÐÐèÒª±£ÁôµÄ×ÊÔ´£¨ÈçÎļþÃèÊö·û¡¢ÍøÂçÁ¬½Ó£©¶¼Òѱ»Êʵ±´¦Àí£¬·ñÔòÕâЩ×ÊÔ´½«ÔÚ `exec` ºó¶ªÊ§
- µ÷ÊÔÄѶȣºexec µÄʹÓÃÔö¼ÓÁ˳ÌÐòÁ÷³ÌµÄ¸´ÔÓÐÔ£¬¶Ôµ÷ÊÔ¹¤×÷Ìá³öÁ˸ü¸ßÒªÇó£¬ÌرðÊÇÔÚ¶àÏ̻߳·¾³ÖÐ
Î塢ʵ¼ù°¸Àý£ºÊ¹Óà `execvp` Æô¶¯Ð³ÌÐò
ÏÂÃæÊÇÒ»¸ö¼òµ¥µÄ C ÓïÑÔʾÀý£¬Õ¹Ê¾ÁËÈçºÎʹÓà `execvp` º¯ÊýÆô¶¯Ò»¸öеijÌÐò£¨ÀýÈç `/bin/ls`£©£º
include