2014-10-29 6 views
0

파일에서 읽은 프로세스 목록을 실행하고 일정을 잡으려고합니다. 파일은 무작위 순서로 실행되고 있으며 왜 이런 일이 발생하는지 궁금합니다. 첫 번째, 두 번째, etc 파일에서 실행중인 명령을 나타내는 간단한 print 문을 사용하며, 항상 다른 (겉으로보기에 무작위 인) 명령으로 인쇄합니다. 지금까지 내 기능을 엉망으로 만들고있는 것은 아니며, 왜 이것이 궁금한 것일까 요?임의 순서로 파일을 실행하는 프로세스 컨트롤러

main.c를

int main(int argc, char ** argv) { 
    pid_t pid[50]; 
    pid_t wpid; 
    int i, j; 
    int status = 0; 
    char *newenvp[] = {NULL}; 
    char *newargv[] = {"./files.txt", NULL}; 

    printf("Before forking in the parent\n"); 
    int numProgs = readPrograms(); 

    for (i=0; i<numProgs; i++) { 
     pid[i] = fork(); 
     if (pid[i] < 0) { 
      perror("fork error"); 
      exit(EXIT_FAILURE); 
     } 
     else if (pid[i] == 0) { 
      printf("Child process running\n"); 
      execve(programs[i], newargv, newenvp); 
      perror("execve error"); 
      exit(EXIT_FAILURE); 
     } 
    } 
    for (i=0; i<numProgs; i++) { 
     wait(&status); 
    } 
    return 0; 
} 
char* programs[50]; 
int readPrograms(); 

readPrograms.c

아래
int readPrograms() { 
    int i=0; 
    char line[50]; 
    int numProgs = -1; 

    FILE *file; 
    file = fopen("files.txt", "r"); 

    while(fgets(line, sizeof(line), file)!=NULL) { 
     line[strlen(line)-1] = '\0'; 
     programs[i]=strdup(line); 
     i++; 
     numProgs++; 
    } 
    fclose(file); 
    return numProgs; 
} 

files.txt 포크를 호출 할 때

./first 
./second 
./third 
./fourth 
+0

'프로그램 [i]] 인구입니까? 메모리 할당? –

+0

@SouravGhosh :'strdup'는 새로운 문자열 (소스 문자열의 복사본)에 대한 포인터를 반환합니다. 이 새로운 문자열은'malloc'을 사용하여 할당됩니다. –

답변

0

아래는, 시스템이 새로운 프로세스를 생성 이하 (자신을 복사 , 임원, 오버레이 자체를 호출). 그러면 포크가 준비됩니다. 부모 프로세스와 하위 프로세스 모두 준비 상태로 표시되고 프로세스의 실행 순서는 시스템 스케줄러에 의해 선택됩니다. 스케쥴러에 따라 부모 또는 자녀가 이제 실행됩니다.