python的os module中有fork()函数用于生成子历程,生成的子历程是父历程的镜像,可是它们有各自的地点空间,子历程复制一份父历程内存给本身,两个历程之 间的执行是彼此独立的,其执行顺序可以是不确定的、随机的、不行预测的,这点与多线程的执行顺序相似。
import os def child(): print 'A new child:', os.getpid() print 'Parent id is:', os.getppid() os._exit(0) def parent(): while True: newpid=os.fork() print newpid if newpid==0: child() else: pids=(os.getpid(),newpid) print "parent:%d,child:%d"%pids print "parent parent:",os.getppid() if raw_input()=='q': break parent()
在我们加载了os模块之后,我们parent函数中fork()函数生成了一个子历程,返回值newpid有两个,一个为0,用以暗示子历程,一个是大于 0的整数,用以暗示父历程,这个常数正是子历程的pid. 通过print语句我们可以清晰看到两个返回值。假如fork()返回值是一个负值,则表白子历程生成不乐成(这个简朴措施中没有思量这种环境)。假如 newpid==0,则表白我们进入到了子历程,也就是child()函数中,在子历程中我们输出了本身的id和父历程的id。假如进入了else语句, 则表白newpid>0,我们进入到父历程中,在父历程中os.getpid()获得本身的id,fork()返回值newpid暗示了子历程的id,同时我们输出了父历程的父历程的id. 通过尝试我们可以看到if和else语句的执行顺序是不确定的,子、父历程的执行顺序由操纵系统的调治算法来抉择。