> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 fork() 함수에 의해 생성된 하위 프로세스 분석

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

高洛峰
풀어 주다: 2016-10-18 10:02:31
원래의
1147명이 탐색했습니다.

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 문의 실행 순서가 불확실하다는 것을 알 수 있습니다. 운영 체제의 스케줄링 알고리즘.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿