我有一个用 c 编写的小程序,我试图了解它是如何工作的,它是一个简单的 while 循环,使用 fork()
和 wait()
来在命令行上打印出几行,我已经尽我所能评论了我认为正在发生的事情
for (i = 1; i <= 3; i++) /*simple while loop, loops 3 times */
{
pid = fork(); /*returns 0 if a child process is created */
if(pid == 0){ /*pid should be a 0 for first loop */
printf("Hello!\n"); /*we print hello */
return (i); /*will this return i to the parent process that called fork? */
} else { /*fork hasn't returned 0? */
pid = wait(&j); /*we wait until j is available? */
printf("Received %d\n", WEXITSTATUS(j)); /*if available we print "received (j)" */
}
}
这个程序应该打印:
Hello!
Received 1
Hello!
Received 2
Hello!
Received 3
当其中一个子进程返回i
时,父进程是否会像&j
一样等待它?这真的让我很困惑,任何帮助将不胜感激。
最佳答案
在循环的每次迭代中,fork()
创建一个子进程。这
子进程打印 Hello!
并将 i
返回给系统。这
父进程阻塞在 wait()
上,直到子进程完成执行。
j
将包含子进程返回给系统的值。
关于c - C while 循环中的 fork() 和 wait() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023869/