fork()相关题
请问下面的程序一共输出多少个 “-”()
|
1
2
3
4
5
6
7
8
9
|
int main(void){ int i; for (i = 0; i < 2; i++) { fork(); printf("-"); } return 0; } |
题目摘自牛客,答案是8
首先需要了解fork()是什么,fork()是UNIX中的分叉函数,fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本(摘自百度百科)。
也就是使用了fork()之后,会创作一个和父进程完全一样的子进程,父进程接下来要干什么,子进程接下来也要干什么。

这张图挺清晰的,摘自牛客。父进程进行循环一,生成一个子进程1,然后父进程和子进程1都printf("-"),此时“-”是在缓存中的,没有输出。父进程的第二个循环,生成一个子进程2,此时子进程2继承了父进程有一个“-”的缓存,然后父进程和子进程2都printf("-"),此时父进程和子进程2的缓存中各有两个“-”。子进程1的第二个循环,生成一个子进程3,然后子进程1和子进程3都pringf("-"),此时子进程1和子进程3的缓存中各有两个“-”。
对于缓存这块的详细理解,可以看一个fork的面试题 | 酷 壳 - CoolShell,说实话我也只是一知半解,对UNIX的了解太少了。

浙公网安备 33010602011771号