我试图了解 fork()
方法在 C 中的工作原理。这是我教科书中的一个示例问题:
int main(void) { pid_t process_id; int status; if (fork() == 0) { if (fork() == 0) { printf("A"); } else { process_id = wait(&status); printf("B"); } } else { if (fork() == 0) { printf("C"); exit(0); } printf("D"); } printf("0"); return (0); }
Which of the following outputs are possible?
1) D0A0B0C
2) CDAB000
3) DA00CB0
4) D0AB0CD
5) AD00BC0
我在纸上勾画了出来,我认为正确的答案是:1、3、5。不过,我在处理 wait(&status)
时遇到了一些困难。我的回答对吗?
最佳答案
我刚刚计算出来,我认为 1、3 和 5 是正确的。
有4个进程,但是其中2个因为等待而产生了依赖关系。 这意味着可能的输出是(_表示可能抢占):
_A_0_B_0_
_C_
_D_0_
2 和 4 不起作用,因为 A 和 B 之间没有 0。 wait 在 fork()!=0 的进程中调用,这意味着它是父进程。 fork() 的语义是向父进程提供子进程的进程 id 作为返回值,而子进程则获得返回值 0。 如果您按照上面的 3 个输出进行操作,应该很容易看出 1、3 和 5 是有效的。
关于c - C 叉练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36927637/