2016-12-17 3 views
1

나는 fork이 코드를 부모 프로세스에서 자식 프로세스를 가지고 내가 알고 :자식 프로세스에서 자식 프로세스를 포크하는 방법 각각

os.fork() 이전 파이썬 세션의 복사본을 생성하고 병렬에서 엽니 다 , os.fork()은 새 프로세스의 ID를 리턴합니다.

하위 프로세스에서 각각 하위 프로세스를 포크하려고하지만 항상 상위 프로세스에서 분기합니다. 그것이 어떻게 행해질 수 있는지.

import os 

def child(): 
    print('this is child', os.getpgid()) 
    os._exit() 

def parent(): 
    while True: 
     newpid = os.fork() 
     if newpid ==0: 
      child() 

     else: 
      pids = (os.getpid(), newpid) 
      print("parent: %d, child: %d\n", pids) 
      reply = input("q for quit/c for new fork\n") 
      if reply == 'c': 
       continue 
      else: 
       break 

parent() 

위의 코드의 출력 : 당신이 아이에서 다시 포크()를 호출하면

parent: %d, child: %d 
(1669, 3685) 
q for quit/c for new fork 
c 
parent: %d, child: %d 
(1669, 3686) 
q for quit/c for new fork 
c 
parent: %d, child: %d 
(1669, 3688) 
q for quit/c for new fork 
c 
parent: %d, child: %d 
(1669, 3689) 
q for quit/c for new fork 
q 
+0

는'나는 아이에서 자식 프로세스를 포크 할 process' 왜 그것을 시도하지? 지금은 자녀 프로세스가 메시지를 인쇄하고 종료합니다. –

답변

0

감사합니다. 나는 대답과 일부 놀기를 읽은 후에, 나는 이것으로 끝났다. 나는 os.wait()을 사용했다.

import os 

reply = int(input("Enter no of proc: ")) 
pid = 0 

for i in range(reply): 

    if pid == 0: 
     pid = os.fork() 

if pid != 0: 
    os.wait() 
    print("PID = {}, PPID = {}".format(os.getpid(), os.getppid())) 

그리고 num_process = 3에 대한 결과는 다음과 같습니다

Enter no of proc: 3 
PID = 49312, PPID = 49311 
PID = 49311, PPID = 49309 
PID = 49309, PPID = 20928 
0

는, 반환 값의 자식에 대한 첫 번째 수준의 아이 0 0이 아닌 것 두 번째 단계 (자녀의 자녀). 어떤 시도없이

:

def child(): 
    print('this is child', os.getpid()) 
    if os.fork() == 0: 
     print('this is a grand child', os.getpid()) 
    os._exit(0) 

출력 : 애 스터와 chrk에

('parent: %d, child: %d\n', (9663, 9664)) 
('this is child', 9664) 
('this is a grand child', 9665) 
+0

코드에 이것을 추가하지만 결과는 같습니다! – samanv

+0

로컬로 작동합니다. 오타를 수정하고 출력을 표시하기 위해 답을 편집했습니다. os.fork()는 부모 프로세스가 아닌 자식에서 0입니다. – AsTeR

관련 문제