#include
ÎÒÊÔÁËһϿÉÒÔ£¬ÏëÈ·ÈÏһϡ£¡£¡£ Èç¹ûÕâÑù×öµÄ»°ÓÐûÓÐʲôÎÊÌ⣬Ðè²»ÐèҪעÒâʲô£¿ лл
#include
Ö÷º¯Êýmain()ÀïÃæÓÐÒ»¸öwhile(1)µÄÑ»·£¬Ã¿¸ô1Ãëfork()Ò»´Î£¬×Ó½ø³Ì´òÓ¡Ò»´®×Ö·ûÖ®ºóµ÷ÓÃexit(0),¸¸½ø³Ì¼ÌÐøloop¡£µ«ÊÇ´Óps¿´ÏµÍ³µÄ½ø³Ì״̬£¬·¢ÏÖÓкöàͬÃû×ֵĽø³Ì£¬ÕâÊÇΪʲô°¢£¬×Ó½ø³ÌÓ¦¸ÃÈçºÎÍ˳ö°¢£¿Ð»Ð»£¡
#include
c++дÁËÒ»¸ö³ÌÐò£¬Éú³ÉÁËÒ»¸öỊ̈߳¬¶øºóÔÚ¸ÃÏß³ÌÖе÷ÓÃforkÉú³ÉÒ»¸ö×Ó½ø³ÌÀ´Ö´ÐÐ perl½Å±¾(¸Ã½Å±¾Ö´ÐÐÕýÈ·)£¬¸¸½ø³ÌÔÚÒ»¸öÑ»·Öе÷ÓÃwaitpid·Ç×èÈûµÄ²é¿´×Ó½ø³Ì״̬£¬µÈ´ý×Ó½ø³ÌÍ˳ö¡£ ½á¹û·¢ÏÖ¸¸½ø³ÌÎÞ·¨Õý³£µÄµÃµ½×Ó½ø³ÌµÄ½áÊø×´Ì¬£¬waitpid¿ªÊ¼·µ»ØÊÇ0£¬ÔÚ×Ó½ø³Ì½áÊøºó£¬ ¸¸½ø³Ì·µ»ØµÄÊÇ-1. ÇëÎÊÕâÊÇʲôÔÒò£¬ÔÚÏß³ÌÖÐÔÙÉú³É½ø³Ì»áÓÐʲôÎÊÌâô£¿
ÏÈ fork ×Ó½ø³ÌÈ»ºó execl ÁíÒ»¸ö¿ÉÖ´ÐгÌÐò£¬ ÈçºÎµÃµ½Õâ¸ö¿ÉÖ´ÐгÌÐò½áÊøµÄ·µ»ØÖµ£¿
pid_t pid; int stat_loc; /*¸¸½ø³Ì*/ if ((pid=fork())>0) { waitpid(pid,&stat_loc,0); /*¸¸½ø³ÌµÈ´ý½ø³ÌºÅΪpidµÄ×Ó½ø³ÌµÄ·µ»Ø*/ } else { /*×Ó½ø³ÌµÄ´¦Àí¹ý³Ì*/ exit(1); } /*¸¸½ø³Ì*/ printf("stat_loc is [%d]\n",stat_loc);
ÕâÊÇ¡¾FreeBSD²Ù×÷ϵͳÉè¼ÆÓëʵÏÖ¡¿µÄϰÌâ5.5£¬ÔÎÄÈçÏ£º 5.5 Explain why the vfork system call will always be more efficient than a clever implementation of the fork system call.
apueÖÐ8-1µÄÀý×Ó£¬£¨µÚÒ»°æÓëµÚ¶þ°æ ½Ô¿É£© myfork.c --------------------------------------------------------------------------- #include "apue.h" int glob=6; char buf[]=" a write to stdout\n"; int main(int argc, char *argv[]) { int var; pid_t pid; var=88; if(write(STDOUT_FILENO,buf,sizeof(buf)-1)!=sizeof(buf)-1) err_sys("write error"); prin...