zoukankan      html  css  js  c++  java
  • linux多进程的总结(fork用法)



    原创:lobbve223  出自: http://www.linuxdiyf.com


    复杂理解理会为,一个进程表示的,便是一个可执行程序的一次执行进程中的一个形状。操作体系对进程的解决,典型的环境,是议决进程表完成的。进程表中的每一个表项,记载的是此后操作体系中一个进程的环境。关于单 CPU的环境而言,每一特定时辰只要一个进程占用 CPU,然则体系中可以梗概同时存在多个活动的(守候执行或继续执行的)进程。

    fork()用于从已存进程中树立一个新进程,新进程为子进程,老进程为父进程.可以议决反省"fork()"地前往值晓得哪个是子进程哪个是父进程。父进程取得的前往值是子进程的进程号,而子进程则前往0。

    基本情势是:

    #include
    #include
    #include
    #include
    #include
    #include
    main()
    {
    pid_t pid;
    int rv;
    pid=fork(); //创立进程
    switch(pid)
    {
    case -1: //前往-1的话,进程创立没乐成
    perror("fork");
    exit(1);
    case 0:
    printf(" CHILD: This is the child process!\n");
    printf(" CHILD: My PID is %d\n", getpid()); //调用 getpid 取得本身的 PID
    printf(" CHILD: My parent's PID is %d\n", getppid()); //getppid() 取得父进程的 PID
    printf(" CHILD: Enter my exit status (make it small): ");
    scanf(" %d", &rv);
    printf(" CHILD: I'm outta here!\n");
    exit(rv);
    default:
    printf("PARENT: This is the parent process!\n");
    printf("PARENT: My PID is %d\n", getpid());
    printf("PARENT: My child's PID is %d\n", pid); //fork() 前往的default值意味着你正在父进程中,前往值是子进程的 PID 。这是取得子进程 PID 的独一办法
    printf("PARENT: I'm now waiting for my child to exit()...\n");
    wait(&rv); //父进程必需守候子进程完成收拾子进程的剩余后才气继续
    printf("PARENT: My child's exit status is: %d\n", WEXITSTATUS(rv)); 也便是父进程不能先于子进程消亡。
    printf("PARENT: I'm outta here!\n");
    }
    }
    //EXITSTATUS() 是一个宏,从 wait() 前往值中提取实践的前往值。
    // wait() 如何晓得在哪个进程上守候?我的意思是,由于父进程可以有多个子进程, wait() 实践守候地是哪一个?答案极度复杂,它守候起头列入的那一个。你可以议决以子进程的 PID 为参数调用 waitpid() 指明是哪一个子进程。

    if (!fork())
    {
    printf("I'm the child!\n");
    exit(0);
    } else
    {
    printf("I'm the parent!\n");
    wait(NULL);
    }

    linux 是多用户和多进程的操作体系,进程在操作体系中的创立,都会天生一个进程描写块,描写此后进程的所有信息,包罗,数据段、代码段、仓库段的地点,此后进程的环境变量,文件描写符等。

    fork函数进程:操作体系先创立一个进程描写块,然后把父进程的所有进程描写符的信息正确拷贝过去,和父进程一样(除了进程ID纷比方样外),代码段共享,数据段和仓库段复制,所有的寄放器的值所有正确拷贝,文件描写符也许正确拷贝。

    fork的前往值,fork在父进程空间中前往子进程的PID,在子进程空间中前往0。




    版权声明: 原创作品,准许转载,转载时请务必以超链接情势标明文章 原始出处 、作者信息和本声明。不然将穷究功令责任。

  • 相关阅读:
    9.4、安装zabbix(2)
    9.4、安装zabbix(1)
    9、zabbix监控
    50、django工程(ajax)
    49、django工程(cookie+session)
    48、django工程(model)
    47、django工程(template)
    46、django工程(view)
    45、django工程(URLconf)
    44、djanjo工程(介绍)
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1976016.html
Copyright © 2011-2022 走看看