簡體   English   中英

父進程不等待子進程(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)還能做什么?

它應該如何知道它應該等待子進程?

父進程正在等待子進程。

子進程不是線程,它是一個完全不同的進程,具有自己的唯一PID和父進程作為其父進程PID。 子級和父級不共享相同的數組,子級擁有自己的副本,因為它是一個不同的進程(不是同一進程的線程)。 因此,當您在子級中將數組設置為“ d”時,它不會影響父進程中的數組。

嘗試在子進程流退出之前將sleep(20)放在子進程流中,在父進程wait()之前放入printf()。 您將看到您的應用程序暫停,因為父母正在等待孩子完成。

fork()創建一個不同的進程,但父進程共享相同的進程上下文。

但是,如果您嘗試更改父級堆棧段中的任何內容,則會對其進行復制並為子進程創建一個單獨的堆棧,但是不會為子進程復制所有資源(如數據段,代碼段等)。 他們倆都分享。

在fork之后更改數據的這種復制稱為“寫入時復制”

父進程正在等待子進程完成。 但是它的printig分別用於父母和孩子,並且兩者的數據不同

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM