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

posted @ 2022-01-05 14:31  云上飘啊飘  阅读(67)  评论(0)    收藏  举报