>  기사  >  백엔드 개발  >  Python에서 fork() 함수에 의해 생성된 하위 프로세스 분석

Python에서 fork() 함수에 의해 생성된 하위 프로세스 분석

高洛峰
高洛峰원래의
2016-10-18 10:02:311081검색

Python의 os 모듈에는 하위 프로세스를 생성하기 위한 fork() 함수가 있습니다. 생성된 하위 프로세스는 상위 프로세스의 미러 이미지이지만 자체 주소 공간이 있습니다. 하위 프로세스는 상위 프로세스 메모리의 복사본을 자신에게 복사합니다. , two 프로세스 간의 실행은 서로 독립적이며 실행 순서는 불확실하고 무작위적이며 예측 불가능할 수 있으며 이는 멀티 스레드의 실행 순서와 유사합니다.

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 모듈을 로드한 후 상위 함수의 fork() 함수는 두 개의 반환 값인 newpid가 있는데, 하나는 하위 프로세스를 나타내는 0이고, other is 0보다 큰 정수는 상위 프로세스를 나타내는 데 사용됩니다. 이 상수는 하위 프로세스의 pid입니다. print 문을 통해 두 개의 반환 값을 명확하게 볼 수 있습니다. fork()의 반환 값이 음수 값이면 하위 프로세스가 성공적으로 생성되지 않았음을 나타냅니다(이 간단한 프로그램에서는 이 상황을 고려하지 않습니다). newpid==0이면 자식 프로세스, 즉 child() 함수를 입력했다는 의미이며, 자식 프로세스에서는 자신의 id와 부모 프로세스의 id를 출력한다. else 문이 입력되면 newpid>0을 의미하며 상위 프로세스에서 os.getpid()는 자체 ID를 가져옵니다. newpid는 해당 프로세스의 ID를 나타냅니다. 동시에 부모 프로세스의 부모 프로세스 ID를 출력합니다. 실험을 통해 if 및 else 문의 실행 순서가 불확실하다는 것을 알 수 있습니다. 운영 체제의 스케줄링 알고리즘.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.