Linux--面试题、fork、进程相关代码及命令(含解析)

有\n不带缓冲区:i

无\n带缓冲区:

(1)第一题打印几个A?产生了几个进程?

#include  
#include  
#include 

int main() {
	int i = 0; for (; i < 2; i++) 
	{
		fork();
		printf("A\n");
	}
    exit(0);
}

Linux--面试题、fork、进程相关代码及命令(含解析)_第1张图片

Linux--面试题、fork、进程相关代码及命令(含解析)_第2张图片

 四个进程六个A

 (2)打印几个A ? 

#include  
#include  
#include  
int main()
{
	int i = 0;
	for (; i < 2; i++)
	{ 
		fork();
		printf("A"); 
	}
	exit(0);
}

Linux--面试题、fork、进程相关代码及命令(含解析)_第3张图片

去掉\n,有缓冲区,将缓冲区中的A也复制了。

8ccc2cb188c148b6ae64933c1fce8430.png

 

 (3)对比以下两个代码, 看看各自打印几个A ? (理解缓冲区)

#include  
#include  
#include  
int main() 
{ 
	printf("A\n");
	fork(); exit(0); 
}
#include  
#include  
#include  
int main() 
{ 
	printf("A");
	fork(); 
	exit(0);
}

有\n不带缓冲区:i

无\n带缓冲区:

Linux--面试题、fork、进程相关代码及命令(含解析)_第4张图片

 

36a9771e97c64a7a9402b0016b1a521f.png

 a4c846486da843c691eb6335835d43e6.png

 缓冲区:printf:将内容先写到缓冲区中,缓冲区刷新到界面(屏幕)

(4)打印几个A ?

#include  
#include 
#include 
int main() 
{ 
	fork() || fork();
	printf("A\n"); 
	exit(0); 
}

Linux--面试题、fork、进程相关代码及命令(含解析)_第5张图片

前一个fork(执行打印A,复制出3,4个fork)的返回值为子进程PID>0,则不执行第二个fork

第三个fork=0(执行过了),执行第四个fork,打印A,出现5,6个fork

第五个fork=0(执行过了,复制第三个,同3),执行第六个fork,打印A(第四个执行过了,不再执行复制)

Linux--面试题、fork、进程相关代码及命令(含解析)_第6张图片

 

 (5)打印几个A ? 

#include 
#include  
#include  
int main()
{ 
	fork() && fork();
	printf("A\n");
	exit(0); 
}

Linux--面试题、fork、进程相关代码及命令(含解析)_第7张图片

 Linux--面试题、fork、进程相关代码及命令(含解析)_第8张图片

 

 

你可能感兴趣的:(Linux命令,代码+运行结果,运维,ubuntu,linux,面试)