2007年01月11日 星期四 01:20
!/usr/bin/python import os import sys import time try: forkPID = os.fork() except OSError: os.exit("Unable to creat child process") if forkPID != 0: print "Parent process executing" elif forkPID == 0: print "child process executing" ÉÏÃæ³ÌÐòÖеÄforkPID²»¾ÍÊÇos.forkµÄ·µ»ØÖµÂ𣿠ËüÓ¦¸ÃÖ»ÊÇÒ»¸öÖµ£¬»òÕßÊÇ0£¬»òÕß·Ç0, Ò²¾ÍÊÇ˵ÉÏÃæµÄ³ÌÐò£¬Ö»ÄÜÓÐÒ»ÐÐÊä³ö¡£ µ«ÊÇ£¬ÔËÐÐÖ®ºó£¬È´×ÜÄÜ¿´µ½Á½ÐÐÊä³ö¡£²»ÖªµÀÊÇΪʲô¡£ __________________________________________________ ¸Ï¿ì×¢²áÑÅ»¢³¬´óÈÝÁ¿Ãâ·ÑÓÊÏä? http://cn.mail.yahoo.com -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070111/e6e11871/attachment.html
2007年01月11日 星期四 02:24
On 1/11/07, Mike Green <iasyb at yahoo.com.cn> wrote: > > !/usr/bin/python > > import os > import sys > import time > > try: > forkPID = os.fork() > except OSError: > os.exit("Unable to creat child process") > if forkPID != 0: > print "Parent process executing" > elif forkPID == 0: > print "child process executing" > > 上面程序中的forkPID不就是os.fork的返回值吗? > 它应该只是一个值,或者是0,或者非0, 也就是说上面的程序,只能有一行输出。 不错,但更完整的说法应该是:(一个进程)执行一遍这段程序只会有一行输出。 但是,运行之后,却总能看到两行输出。不知道是为什么。 > 这就说明这段代码被执行了两遍,正好解释了os.fork()的含义: 从调用os.fork()这一刻起,系统中存在了两个进程(主进程和子进程),各自独立的从程序的当前状态继续往下运行。子进程完全拷贝了父进程的地址空间, 它们唯一的区别在于os.fork()的返回值(forkPID)不同。 所以,实际上是两个进程分别在if语句中判断了自己地址空间中的forkPID变量――并不是改变了变量的值,而是本来就有两个不同的forkPID变量。 -------------- next part -------------- An HTML attachment was scrubbed... URL: http://python.cn/pipermail/python-chinese/attachments/20070111/593254b6/attachment.htm
Zeuux © 2025
京ICP备05028076号