【发布时间】:2016-03-26 16:30:07
【问题描述】:
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) 有什么作用?
它应该如何知道它应该等待子进程?
【问题讨论】:
-
子节点获得父节点地址空间的副本。对
array[]的更改仅对子副本进行,父副本保持不变。根据您的操作系统,您可以获得特殊的“共享”内存,其中两个进程都可以看到更改。