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的了解太少了。