2012-10-26 3 views
0

하나의 마스터 프로세스에서 여러 프로세스를 생성하려고합니다. 나는 exec 계열의 함수를 사용하고 싶지만, 의도 한 방식대로 수행하지 않는 것 같습니다. exec()가 블로킹 콜이거나 아마 잘못 사용하고있는 것 같습니다. 어쨌든, 코드에 :마스터 프로세스에서 여러 프로세스 실행

creating:0 
HI!!! 

그리고 모든 것이 정상적으로 종료 :

const char* ROUTERLOCATION = "../../router"; 
int main(int argc, char** argv) { 
    manager manager; 
    vector<string> instructions = manager.readFile(argv[1]); 
    ... 
    //file gives me the number of proceses i want to spawn and that value goes in 
    //rCount 
    for(int i = 0; i < rCount; i++){ 
    cout << "creating:" << i << endl; 
    execl(ROUTERLOCATION, "",NULL); 
    } 
} 

내가 볼 출력됩니다. execl()을 사용하여 하나 이상의 프로세스를 생성 할 수 있습니까?

또한 이러한 각 프로세스와 통신하고 싶습니다. 따라서 이러한 프로세스가 실행되는 동안 차단하고 싶지는 않습니다.

+1

은'전화 fork'입니까? 그것을 호출해야하며, 자식 프로세스임을 나타내는 경우 'exec'를 수행하십시오. 부모는 계속해서 달리고 아이들을 돌진합니다. 아이들은 모두 자신이 원하는 프로그램으로 대체합니다. – paddy

답변

2

마스터 프로세스에서 fork이 필요하고 하위 프로세스에서 execl으로 전화해야합니다. (exec 함수 군은 현재 프로세스 이미지를 새 프로세스로 대체하므로 for 루프가 완료되지 않는 이유는 무엇입니까?)

+0

내가 마스터에서 포크를하면 내 모든 아이들이 파일을 읽지 않을까요? – nook

+0

당신의 readFile이 무엇인지 모르겠다. 다만 파일을 읽은 다음 파일을 닫고 결과를 반환한다면, 그 다음에 (execl 바로 전에) 포크한다면 파일을 다시 읽지 않아도된다. 포크 (fork) 지점에서부터 진행됩니다. 자녀가 적어도 execl이 호출 될 때까지는 부모가하는 모든 것을 복사 할 것입니다. (모든 것이 바뀝니다.) – hexist

+1

맞습니다. 감사. 당신이 처음이었던 것처럼 당신을 받아 들였습니다. 정말 고마워. – nook

1

호출 exec()은 현재 프로그램이 더 이상 존재하지 않음을 의미합니다. fork()을 사용하여 새 프로세스를 만든 다음 exec()을 호출하여 exec()이 새 프로세스를 대체하고 주 프로세스가 의도 한대로 계속 작동하도록 할 수 있습니다.

예 :

pid_t pid = fork(); 
if (pid == 0) {// child 
    execl(); 
} else { // parent 
} 
관련 문제