2014-10-29 57 views
0

我試圖執行並安排自己從文件中讀取的進程列表。這些文件以隨機順序運行,我只是好奇爲什麼會發生這種情況。我在第一個,第二個等文件中有簡單的打印語句,告訴哪些文件正在運行,並且它們總是以不同的(看似隨機的)順序打印。到目前爲止,它並沒有搞亂我的功能,我只是好奇這是爲什麼。過程控制器以隨機順序運行文件

的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]'人口?內存分配? – 2014-10-29 07:51:58

+0

@SouravGhosh:'strdup'返回一個指向新字符串(它是源字符串的副本)的指針。這個新字符串使用'malloc'分配 – 2014-10-30 14:19:17

回答

0

當調用fork,系統會創建新的進程(自我複製,調用exec,覆蓋本身)。 然後您的分支就緒,父進程和子進程都標記爲就緒,進程的運行順序由您的系統調度程序選擇。 因此,根據您的調度程序,您的父母或您的孩子現在都可以運行。