在 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)
。
我正在用 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)
。