2014-02-17 3 views
0

내가 읽고있는 교과서에 따르면 아래 코드는 고유 한 상태로 종료 될 N 개의 자식 프로세스를 만듭니다. 이 2^n 개의 자식 프로세스 n은 어디 있다는 것을 믿고 날 리드C : fork() 자식 프로세스

int main(){ 
    Fork(); 
    Fork(); 
    Fork(); 
    printf("hello\n"); 
    exit(0); 
} 

: 이전 교과서에

/* Parent creates N children */ 
for (i = 0; i < N; i++) 
    if ((pid[i] = Fork()) == 0) /* Child */ 
     exit(100+i); 

는, 다음과 같은 코드가 8 출력 라인있을 것이라는 점을 주장한다 fork()가 호출 된 횟수. 자식이 매번 종료하기 때문에 첫 번째 코드가 N 개의 자식 프로세스 만 생성하는 이유 (2^N과 반대)는 후속 fork()가 호출 될 때까지 상위 프로세스에서만 작동합니다.

+2

두 번째 경우에 모든 아이들은 계속해서 분기하고 인쇄합니다. 첫 번째 경우에는 자녀가 생성되는 즉시 종료되므로 부모 만 계속됩니다. –

+0

@ JerryJeremiah 감사합니다! 이 질문에 대한 답변입니다. –

+0

사용중인 책에 대해 언급해야합니다. 나는 Stevens "UNIX Network Programming"이 초기 자본 시스템 호출 이름을 사용하여 시스템 호출의 오류 검사 버전을 지정한다는 것을 알고 있습니다. –

답변

1

fork()을 성공적으로 호출 할 때마다 새 프로세스가 만들어집니다. 첫 번째 예

, 어린이 ( fork()되는 0의 리턴 값)가 다음 fork() 호출되지 의미 exit(); 호출 처리한다.

두 번째 예에서는 모든 하위 프로세스가 분기를 계속합니다.

1

fork()가 호출되면 상위 데이터를 복사하고 그 지점에서 개별적으로 실행을 시작합니다. 따라서 부모 또는 자식의 실행은 프로세스의 스케줄링에 달려 있습니다. 어떤 프로세스가 자식이나 부모 이건간에 CPU 시간을 얻는다. 어떤 코드가 어떤 프로세스 (자식 또는 프로세스)에서 실행되어야하는지주의해야합니다.

관련 문제