2012-11-18 5 views
1

관리자 프로세스에서 여러 프로세스를 포킹하려고합니다. 그런 다음이 포크 된 프로세스가 수신 대기하는 임의의 포트 번호를 만들고 싶습니다. 그러나 무작위로 시드하고 난수를 얻으면 세 가지 프로세스간에 동일한 수를 얻습니다. 예를 들면 :분기 된 프로세스 사이의 임의의 숫자가 동일합니다.

관리자 :

int main(){ 
for(int i = 0; i < rCount; i++){ 
    pid_t pid = fork(); 
    if (pid == 0) {// child 
     execl(ROUTERLOCATION,"",NULL); //create router process 
    } 
    else { // parent 
    } 
    } 
} 

라우터 :

int main(){ 
    randomPort(); 
} 
void randomPort(){ 
    srand(time(NULL)); 
    int host_port = rand() % 99999 + 11111; 
    cout << houst_port << endl; 
} 

나는 파종은 관리자에 시도, 후 공정에서 랜드를 시도,하지만 난 여전히 점점 같은 문제가 내가 할 수있을 때 같은 번호. 시간 외에도 다른 것을 뿌려도 좋은 결과를 얻을 수 있습니까?

+1

시간과 프로세스 번호를 비교해보십시오. –

+0

이것은 좋은 생각입니다. 나는 그것을 받아들이고 싶지만 그것은 논평이다. 담당자를 원하면 답변으로 추가하면 받아 들일 것입니다. – nook

답변

1

시간이 모든 프로세스에서 동일하므로 프로세스간에 다른 입력이 필요합니다. 프로세스 번호는이 작업에 적합합니다. 시간에 프로세스 번호를 추가하여 둘을 결합하십시오.

1

시드가 (pid % RAND_MAX)^WHATEVER 인 경우 - 각 프로세스마다 다른 시드가 보장됩니다.

예측 가능성을 줄이려면 WHATEVER을 특정 값으로 정의하거나 (time(NULL) % RAND_MAX)을 정의 할 수 있습니다.

관련 문제