python fork进程

#!/usr/bin/env python

import os, signal,sys, time, select, random

def child_make(i, read_end, write_end):
    fork_result = os.fork()
    if fork_result == 0:
        os.close(read_end)
        child_main(i,write_end)


def child_main(i,write_end):
    time.sleep(random.randint(3,6))
    os.write(write_end, '=> %d' % i)
    sys.exit()

def  make_pipe():
    read_end, write_end = os.pipe()
    return read_end, write_end

def  main():
    read_fds = []
    for i in range(100):
        read_end, write_end = make_pipe()
        child_make(i,read_end, write_end)
        os.close(write_end)
        read_fds.append(read_end)
        
    while read_fds:
        rlist, wlist, xlist = select.select(read_fds,[], [])
        if len(rlist) != 0:
            for fd in rlist:
                read_fds.remove(fd)
                data = os.read(fd,32)
                if not data: print 'empty'
                print data
            print len(read_fds)

    print 'parent died'

if __name__ == '__main__':
    #signal.signal(sigal.SIGCHLD,signal.SIG_IGN)
    main()
posted @ 2012-08-13 00:25  苍术厚朴  阅读(805)  评论(0)    收藏  举报