Linux fork()||fork()问题

以下代码会输出几个"A"?

int main()   
{   
  
	fork() || fork();

	printf("A\n");
     
}   

代码分析:

//父进程
	fork() || fork();

	printf("A\n");

这里父进程中的第一个fork先执行,产生一个子进程:

//子进程1
	fork() || fork();

	printf("A\n");

这时有两个进程,且两个进程的第一个fork已经执行完了。

在父进程中fork的返回值是大于0的,子进程1中fork的返回值是等于0的。按照期望,如果父进程中的fork()||fork();是“或”的关系,第一个fork大于0时表达式就已经成立了,那么后边的fork是不执行的,它没有机会执行,所以直接执行printf("A\n");,输出"A"。

这时,对于子进程1来说,第一个fork已经执行完了,它的返回值是等于0的,对于“或”的关系来说,表达式不成立,就要看“||”的另一边,所以执行子进程1中fork()||fork();的第二个fork,这个fork执行,就把子进程1复制了一份又产生了一个子进程2:

//子进程2
	fork() || fork();

	printf("A\n");

这时候,对于子进程1来说fork() || fork();中的第一个fork的返回值等于0,第二个fork的返回值大于0,表达式成立,执行printf("A\n");,输出"A"。这时候其实无论第二各fork是否大于0都会执行printf("A\n");,输出"A"。

在子进程2中,fork() || fork();两个fork都执行过了,直接执行printf("A\n");,输出"A"。

运行结果:

在这里插入图片描述

你可能感兴趣的:(Linux,linux,chrome,运维)