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

标签 c process execve

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

所以这是我编写的用于创建进程并在其上运行 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的execve就这么简单

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

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

return 0;

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

最佳答案

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

关于c - 在 C 中创建新进程时变量的值不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47613445/

相关文章:

c - 交叉编译问题

c - 声明的 int 上的指针操作数与声明的指针

linux - 当进行系统调用时,是整个进程阻塞还是仅线程阻塞?

mysql - apache进程和Mysql进程过载

javascript - 更新 CRM 2011 中的记录时触发的工作流程/流程

c - linux 编程,标准输出到管道在 execve 之前不起作用

objective-c - objc_msgSend 15 崩溃

c - NULL 数据指针与 NULL 函数指针相同吗?

c - 我在哪里可以找到在我的 C 程序的 .data 部分中创建静态变量的程序集?

c - fork 和 execve 段错误