在 C 中创建新进程时变量的值不会改变

Values of variables don't change when creating new processes in C

我正在用 c 编写学校作业,我们正在为此使用流程。我的目标是将一些随机值分配给一个结构,当我尝试通过 execve 将一些随机数分配给一个特定进程时,每个其他进程在应该更改它时都保持相同的值。

所以这是我为创建进程而编写的代码,运行它们的执行程序

    for (int i = 0; i < init_people; ++i) {
    switch (pids[i] = fork()) {

        case -1:
            fprintf(stderr,"Error #%03d: %s\n", errno, strerror(errno));
            exit(1);
            break;

        case 0:
            switch (i % 2) {
                case 0:
                    execve("./A",args,NULL);
                    break;                      
                case 1:
                    execve("./B",args,NULL);
                    break;                     
                default:
                    break;
            }
            exit(0);
            break;               
        default:
            waitpid(pids[i], &returnStatus, 0);
            break;
  } }

A.c 和 B.c 的执行就这么简单

int main(int argc, char *argv[]) {

int r;
srand(time(NULL));
r = rand() & 11;
printf("%d\n", r); 

return 0;

}

每次我 运行 这段代码它总是给我一个随机值,该值在所有执行中保持相同,而每次我 运行 每个进程的 execve 文件时它应该改变.我怎样才能解决这个问题?我被迫使用 execve 并且无法更改它。

time() returns 整秒。所有 fork+execve 组合很可能会在一秒钟内完成,这意味着 time(NULL) 的值在每个已执行的子进程中都是相同的。如果您希望子进程的伪随机生成器以不同方式初始化,您可以使用 getpid() 而不是 time(NULL)