¸üÐÂʱ¼ä:2021Äê07ÔÂ20ÈÕ14ʱ22·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:

fork()ÒÔÉϺ¯Êýµ÷Óú󣬲Ù×÷ϵͳ»á½¨Á¢µ±Ç°Ï̵߳ĸ±±¾ÒÔʵÏÖ½ø³ÌµÄ´´½¨£¬´ËʱÔÓеĽø³Ì±»³ÆÎª¸¸½ø³Ì£¬¸´ÖƵĽø³Ì±»³ÆÎª×Ó½ø³Ì¡£ÐèҪעÒâµÄÊÇ£¬fork()º¯ÊýµÄÒ»´Îµ÷ÓòúÉúÁ½¸ö½á¹û£ºÈôµ±Ç°Ö´ÐÐÊǸ¸½ø³Ì£¬fork()º¯Êý·µ»Ø×Ó½ø³ÌID£»Èôµ±Ç°Ö´ÐеĽø³ÌÊÇ×Ó½ø³Ì£¬fork()º¯Êý·µ»Ø0¡£Èç¹ûfork()º¯Êýµ÷ÓÃʱ³öÏÖ´íÎ󣬽ø³Ì´´½¨Ê§°Ü£¬½«·µ»ØÒ»¸ö¸ºÖµ¡£
ÏÂÃæÊ¹ÓÃfork()º¯Êý´´½¨Ò»¸ö×Ó½ø³Ì£¬Èø¸½ø³ÌºÍ×Ó½ø³Ì·Ö±ðÖ´Ðв»Í¬µÄÈÎÎñ£¬´úÂëÈçÏ£º
import os
import time
value = os.fork() # ´´½¨×Ó½ø³Ì
if value == 0: # ×Ó½ø³ÌÖ´ÐÐif·ÖÖ§Óï¾ä
print('---×Ó½ø³Ì---')
time.sleep(2)
else: # ¸¸½ø³ÌÖ´ÐÐelse·ÖÖ§Óï¾ä
print('---¸¸½ø³Ì---')
time.sleep(2)
ÒÔÉϳÌÐòµ÷ÓÃfork()º¯Êý´´½¨×Ó½ø³Ì£¬Ê¹ÓñäÁ¿value¼Ç¼fork()µÄ·µ»ØÖµ£¬²¢¸ù¾Ýfork()µÄ·µ»Ø½á¹ûÇø·Ö¸¸½ø³ÌÓë×Ó½ø³Ì£¬ÎªÕâÁ½¸ö½ø³Ì·ÖÅɲ»Í¬µÄÈÎÎñ£ºµ±valueΪ0ʱ£¬ËµÃ÷µ±Ç°½ø³ÌÊÇ×Ó½ø³Ì£¬Ö´ÐÐif·ÖÖ§ÖеÄÓï¾ä£»µ±value²»Îª0ʱ£¬ËµÃ÷´Ëʱϵͳµ÷¶ÈµÄÊǸ¸½ø³Ì£¬Ö´ÐÐelse·ÖÖ§ÖеÄÓï¾ä¡£½ø³Ì´´½¨Óë³ÌÐòÖ´ÐеľßÌåÁ÷³ÌÈçͼ1Ëùʾ¡£

ͼ1 ʹÓÃfork()º¯Êý´´½¨½ø³Ì
³ÌÐòÖ´ÐÐÒ»´ÎµÄ½á¹ûÈçÏÂËùʾ£º
---¸¸½ø³Ì--- ---×Ó½ø³Ì---
¹Û²ì´Ë´Î½á¹û¿ÉÒÔÍÆ²â£¬ÏµÍ³Ïȵ÷¶È¸¸½ø³Ì£¬ÔÙµ÷¶È×Ó½ø³Ì£¬µ«Êµ¼ÊÉÏ£¬×Ó½ø³ÌºÍ¸¸½ø³ÌÖ´ÐеÄ˳ÐòÊDz»È·¶¨µÄ£¬»áÊܵ½Ê±¼äƬ¡¢µ÷¶ÈÓÅÏȼ¶»òÆäËüÒòËØµÄÓ°Ïì¡£
Èô³ÌÐòÖÐ˳Ðòµ÷ÓÃÁ½´Îfork()º¯Êý£¬ÄÇôµÚÒ»´Îµ÷ÓÃfork()ºóϵͳÖдæÔÚµÄÁ½¸ö½ø³Ì¶¼»áµ÷Óõڶþ¸öfork()º¯Êý´´½¨Ð½ø³Ì£¬Á½´Îfork()º¯Êýºó½ø³ÌµÄ±ä»¯Èçͼ2Ëùʾ¡£

ͼ2 ½ø³ÌµÄ±ä»¯
´Óͼ2ÖпÉÒÔ¿´³ö£¬“¸¸½ø³Ì1”ºÍ“×Ó½ø³Ì1”Ôٴθ´ÖƳöÁ½¸ö×Ó½ø³Ì£¬“¸¸½ø³Ì1”³ÉΪ“×Ó½ø³Ì2”µÄ¸¸½ø³Ì£¬“×Ó½ø³Ì1”³ÉΪ“×Ó½ø³Ì3”µÄ¸¸½ø³Ì£¬±ä³É“¸¸½ø³Ì2”¡£
ÏÂÃæÊ¹ÓÃfork()º¯Êý´´½¨3¸ö×Ó½ø³Ì£¬´úÂëÈçÏ£º
import os
import time
print('---µÚÒ»´Îfork()µ÷ÓÃ---')
value = os.fork() # ´´½¨×Ó½ø³Ì£¬´Ëʱ½ø³ÌµÄ×ÜÊýÁ¿Îª2
if value == 0: # ×Ó½ø³ÌÖ´ÐÐif·ÖÖ§Óï¾ä
print('---½ø³Ì1---')
time.sleep(2)
else: # ¸¸½ø³ÌÖ´ÐÐelse·ÖÖ§Óï¾ä
print('---½ø³Ì2---')
time.sleep(2)
print('---µÚ¶þ´Îfork()µ÷ÓÃ---')
value = os.fork() # ´´½¨×Ó½ø³Ì£¬´Ëʱ½ø³ÌµÄ×ÜÊýÁ¿Îª4
if value == 0: # ×Ó½ø³ÌÖ´ÐÐif·ÖÖ§Óï¾ä
print('---½ø³Ì3---')
time.sleep(2)
else: # ¸¸½ø³ÌÖ´ÐÐelse·ÖÖ§Óï¾ä
print('---½ø³Ì4---')
time.sleep(2)
³ÌÐòÖ´ÐеĽá¹ûÈçÏ£º
---µÚÒ»´Îfork()µ÷ÓÃ--- ---½ø³Ì2--- ---½ø³Ì1--- ---µÚ¶þ´Îfork()µ÷ÓÃ--- ---½ø³Ì4--- ---½ø³Ì4--- ---½ø³Ì3--- ---½ø³Ì3---
ÓÉÖ´Ðнá¹û¿ÉÖª£¬³ÌÐòÔÚµÚÒ»´Îµ÷ÓÃfork()º¯Êýºó´´½¨ÁËÒ»¸ö×Ó½ø³Ì£¬´Ëʱ¹²Óи¸½ø³ÌºÍ×Ó½ø³ÌÖ´ÐÐÏÂÃæµÄ´úÂ룬·Ö±ðÊä³ö “---½ø³Ì2---”ºÍ“---½ø³Ì1---”£»³ÌÐòÔÚµÚ¶þ´Îµ÷ÓÃfork()º¯ÊýºóÓÖ´´½¨ÁËÁ½¸öеÄ×Ó½ø³Ì£¬´Ëʱ¹²ÓÐÁ½¸ö¸¸½ø³ÌºÍÁ½¸ö×Ó½ø³ÌÖ´ÐÐÏÂÃæµÄ´úÂ룬·Ö±ðÊä³öÁ½´Î“---½ø³Ì4---”ºÍ“---½ø³Ì3---”¡£
»ñÈ¡µ±Ç°½ø³ÌµÄID
½ø³ÌIDÊǽø³ÌµÄΨһ±êʶ£¬ÎªÁ˱ãÓÚ¹ÜÀíϵͳÖеĽø³Ì£¬osÄ£¿éÌṩÁËos.getpid()º¯ÊýºÍos.getppid()º¯ÊýÀ´·Ö±ð»ñÈ¡µ±Ç°½ø³ÌidºÍµ±Ç°½ø³Ì¸¸½ø³ÌµÄid£¬Ê¾Àý´úÂëÈçÏ£º
import os
process = os.fork() # ´´½¨×Ó½ø³Ì
if process == 0:
# »ñÈ¡¸¸½ø³ÌµÄID
print('ÎÒÊÇ×Ó½ø³Ì-%d£¬¸¸½ø³ÌÊÇ%d'%(os.getpid(), os.getppid()))
else:
print('ÎÒÊǸ¸½ø³Ì-%d, ×Ó½ø³ÌÊÇ%d'%(os.getpid(), process)) # »ñÈ¡µ±Ç°Ï̵߳ÄID
³ÌÐòÔËÐеĽá¹ûÈçÏ£º
ÎÒÊǸ¸½ø³Ì-2497, ×Ó½ø³ÌÊÇ2498 ÎÒÊÇ×Ó½ø³Ì-2498£¬¸¸½ø³ÌÊÇ2497
дÅÀ³æÊÇÓÃ¶à½ø³ÌºÃ?»¹ÊǶàÏ̺߳Ã?
ʲôÊÇIPµØÖ·£¿Ê¹ÓÃIPµØÖ·ºÍ¶Ë¿ÚºÅÄÜÈ·¶¨Ö÷»úµÄ½ø³ÌÂð£¿
½ø³Ì¹ÜÀí¹¤¾ßSupervisor°²×°²¿Êð½Ì³Ì
ÀÖÓãµç¾ºpython+´óÊý¾Ý¿ª·¢¸ßÊÖ°à
±±¾©Ð£Çø