2013-03-10 1 views
3

그래서 특정 작업을 여러 번 할 프로그램을 만들고 있습니다. 한 번 쓰레드를 사용하여 프로그램을 작성했지만 이제 fork()를 사용하여 프로세스를 수행해야합니다.정확한 숫자의 자식을 fork()하는 방법

스레드를 사용하면 스레드 수를 지정하고 함수를 실행 (공유 메모리의 변수 변경) 한 다음 최종적으로 공유 메모리의 최종 값을 사용하는 스레드를 실행하게하면됩니다.

그러나 지금도 같은 일을하고 싶지만 포크 (fork)를 호출 할 때마다 그것을하는 법을 본질적으로 배가시킵니다. 따라서 for 루프에서 fork()를 호출하면 각 부모 및 자식 프로세스는 자체적으로 fork()를 호출하는 루프를 통과하게됩니다.

그럼 내 질문에 : 포크를 사용하여 정확한 수의 자식 프로세스를 만들 수 있습니까? (예를 들어 5 명의 자식이 필요합니다), 부모 프로세스는이 5가 실행되기 전에 실행이 완료 될 때까지 기다려야합니까?

도움 주셔서 감사합니다.

+0

각 어린이는 자녀임을 알고 있습니다. 자녀가해야 할 일 (학교에 가야합니까?)만을 수행하고 부모 프로세스가 실행중인 곳 (직장에서)을 계속하지 않고 종료하는지 확인하십시오. niculare 또는 Quentin의 답과 마찬가지입니다. –

답변

6

내가이 일을 생각 :

int processes = 5; 
int i; 
for (i = 0; i < processes; ++i) { 
    if (fork() == 0) { 
     // do the job specific to the child process 
     ... 
     // don't forget to exit from the child 
     exit(0); 
    } 
} 
// wait all child processes 
int status; 
for (i = 0; i < processes; ++i) 
    wait(&status); 
+0

'fork()'오류가 있는지 확인하십시오. –

+1

단 한 번이 아니라 waitpid를 5 번 호출하려는 경우를 제외하면이 방법이 효과적입니다. waitpid (-1)는 "any"자식 프로세스가 종료 될 때까지 대기하는 것을 의미합니다. – selbie

+0

이것은 각 하위 프로세스가 루프를 계속할 것이라는 것을 의미하지 않을까요? 예를 들어,'i'가 0 일 때, 자식 프로세스를 생성하고, 이제는 자식 *과 * 부모 모두가 루프를 가지며 둘 다'i'를 증가시키고, 둘 다'fork'는 새로운 자식 프로세스가됩니다. 'i' 등등 .. 어쩌면 틀렸어. 커피가 필요해. – dreamlax

1

어느 각각 포크 것을 어린이의 해당 번호가 예를 들어, 부모가 포크 n 번 것이다 (그래서 당신은 당신의 프로세스를 구성 할 수 있습니다, 아이들 N-1, 그들의 자식 n-2 등), 또는 부모 만 루프에 계속 있도록 포크를 제한 할 수 있습니다 (가장 간단한 경우). 그래서 아이들이 그 고리를 벗어나게하십시오.

관련 문제