父进程不等待子进程(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 分别和
的不同数据
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 分别和
的不同数据