[英]Can a child process wait for the parent process to terminate in Linux programming in 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.