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

时间:2016-03-26 16:30:08

标签: c process fork wait

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”

等待(NULL)甚至做什么?

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

2 个答案:

答案 0 :(得分:0)

父进程 等待子进程。

子进程不是一个线程,它是一个完全不同的进程,它有自己唯一的PID,父进程是父PID。子节点和父节点不共享相同的数组,子节点有自己的副本,因为它是一个不同的进程(不是同一进程的线程)。因此,当您在子节点中将数组设置为“d”时,它不会影响父进程中的数组。

尝试在退出之前在子进程流中放置一个sleep(20),并在父wait()之前放置一个printf()。当父母等待孩子完成时,您将看到您的申请暂停。

答案 1 :(得分:0)

fork()创建一个不同的进程,但父级共享相同的进程上下文。

但是如果您尝试更改父级的堆栈段中的任何内容,则会复制该内容并为子进程创建单独的堆栈,但不会为子进程复制所有资源(如数据段,代码段等)。他们都分享。

调用fork后更改数据的复制&#34; copy on write&#34;

父进程正在等待子进程完成。但它的父母和孩子的原则分别和两者的不同数据