zoukankan      html  css  js  c++  java
  • fork()的一点学习辨识

    很简单的代码例子,想要说明的是fork机制当中,子进程也是会将父进程的后续部分代码以及自fork点开始相应的buffer当中内容拷贝到自己的buffer当中(虽然采用的copy-on-write的机制);因此,如果输出buffer的位置在fork点之后,那么子进程依然会拷贝父进程的output-buffer当中的内容;

    #include <unistd.h>
    #include <assert.h>
    #include <stdio.h>
    
    int main(int argc, char **argv){  //   $./bin-file fork_times
            assert(argc == 2);
            int fork_time = atoi(argv[1]);
            int i = 0;if(fork_time > 0){
                    for(; i<fork_time; i++){
                    #if 1 printf(
    "#"); fork(); #else
                            fork();
                            printf("#");
    #endif } } return 0; }

    假设fork的次数为1, 这里,如果print 前置于fork,那么将输出2个‘#’;而后置情况下则会输出3个‘#’;

    如果fork 执行俩次,那么前置情况输出6个,因为共有6个进程产生, 各个进程贡献一个‘#’; 而后置情况下,则会输出8个‘#’;

    但是后置情况下,拷贝的内容不会累积,因为每次就只会拷贝一次父进程的buffer;后置情况中,每个子进程会多输出一个‘#’;

    当fork_times为3时, 前置输出数目为24,  后置输出数目为28;

  • 相关阅读:
    电脑命令大全
    iBatis简单入门教程
    Tomcat从内存、并发、缓存方面优化方法
    TreeMap 源码分析
    红黑树详细分析,看了都说好
    短链接原理
    容器的六大理解误区
    超能陆战队中的微型机器人现已实现!
    怎么理解微服务架构
    使用Golang时遇到的一些坑
  • 原文地址:https://www.cnblogs.com/superniaoren/p/3345281.html
Copyright © 2011-2022 走看看