2014-10-29 58 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,覆盖本身)。 然后您的分支就绪,父进程和子进程都标记为就绪,进程的运行顺序由您的系统调度程序选择。 因此,根据您的调度程序,您的父母或您的孩子现在都可以运行。