父进程不等待子进程(c代码)

parent process does not wait for the child process (c code)

char array[ARRAY_SIZE];

void child_process_routine(){
int j;
    for(j = 0;j<ARRAY_SIZE;j++)
    array[j]='d';
}

main()
{
    pid_t child_pid;
    int i;
    for(i = 0;i<ARRAY_SIZE;i++)
    array[i]='c';
    child_pid = fork();

        switch (child_pid) {
        case -1:
            perror("error");    
            exit(1);
        case 0: 
            child_process_routine();
            exit(0);    
        default:
            wait(NULL);
        }

    print_array(array); 
}

你能解释一下为什么 父进程不等待子进程 而这又给我输出“ cccccc ”吗?它在子进程中被更改为“dddddd”

wait(NULL) 到底做了什么?

它怎么知道它应该等待子进程?

parent进程正在等待child进程。

child 不是线程,它是一个完全不同的进程,具有自己唯一的 PID 和 parent 作为其 Parent PID。 child 和 parent 不共享同一个数组,child 有自己的副本,因为它是不同的进程(不是同一进程的线程)。所以当你在child中设置数组为'd'时,它不会影响parent过程中的数组。

尝试在 child 进程流退出之前放置一个 sleep(20),并在 parent wait() 之前放置一个 printf()。您会看到您的应用程序暂停,因为 parent 正在等待 child 完成。

fork() 创建不同的进程,但 parent 共享相同的进程上下文。

但如果您尝试更改 parent 堆栈段中的任何内容,它会复制该堆栈段并为 child 进程创建一个单独的堆栈,但所有资源,如数据段、代码child 进程不会复制段等。他们都分享了。

调用fork后更改数据时的复制"copy on write"

Parent 进程正在等待 child 进程完成。但是 parent 和 child 的 printig 分别和

的不同数据