zoukankan      html  css  js  c++  java
  • Linux C 子进程的调度

    例子一:

    #include<stdio.h>

      #include <sys/types.h> //pid_t类型定义

      #include <unistd.h> //函数fork(),getpid()定义

      void main ()

      {

      pid_t pid;

      pid=fork();

      if (pid < 0)

      printf("error in fork!");

      else if (pid == 0)

      printf("i am the child process, my process id is %d\n",getpid());

      else

      printf("i am the parent process, my process id is %d\n",getpid());

      }

    例子二:

    #include<stdio.h>

      #include <sys/types.h> //pid_t类型定义

      #include <unistd.h> //函数fork(),getpid()定义

      void main ()

      {

      pid_t pid,pid2;

      pid=fork();

      if (pid < 0)

      printf("error in fork!");

      else if (pid == 0)

      printf("i am the child process, my process id is %d\n",getpid());

      else

      printf("i am the parent process, my process id is %d\n",getpid());

      pid2=fork();

      if (pid2 < 0)

      printf("error in fork!");

      else if (pid2 == 0)

      printf("i am the child process, my process id is %d\n",getpid());

      else

      printf("i am the parent process, my process id is %d\n",getpid());

      }


    输出:

    I am the paraent process,my process is 2927
    I am the paraent process,my process is 2927
    I am the child process, my process id is 2928
    I am the paraent process,my process is 2928
    I am the child process, my process id is 2929
    I am the child process, my process id is 2930

    运行过程:

    首先是“父进程27”开始执行,执行到pid,生成子进程pid,然后输出一次“27”,执行到pid2,生成子进程pid2,然后输出一次“27”;

    然后开始从第一个fork()执行pid子进程,输出“子进程28”,然后执行到第二个fork(),生成子进程pid2,输出“父进程28”(即pid作为的父进程)。

    然后开始从第二个fork()执行pid子进程的子进程,输出“子进程29”

    然后开始从第二个fork()执行pid2子进程,输出“子进程30”

    看这个程序的时候,头脑中必须首先了解一个概念:在语句pid=fork()之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的代码部分完全相同,将要执行的下一条语句都是if(pid==0)……。

    两个进程中,原先就存在的那个被称作“父进程”,新出现的那个被称作“子进程”。父子进程的区别除了进程标志符(process ID)不同外,变量pid的值也不相同,pid存放的是fork的返回值。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:

    1. 在父进程中,fork返回新创建子进程的进程ID;
    2. 在子进程中,fork返回0;
    3. 如果出现错误,fork返回一个负值;



  • 相关阅读:
    安卓逆向5.Android Studio JNI静态注册(C++和Java互操作)
    安卓逆向二
    ASP.Net Core Web 在IIS下的发布流程
    Android Studio安装记录
    Vistual studio智能提示不显示或者显示为英文的解决办法
    (转)程序语言理论的学习对于程序员教育的作用
    普通用户ssh无密码登录设置
    (转)完全用GNU/Linux工作 by 王珢
    (转)谁是真正的程序语言专家
    java操作XML
  • 原文地址:https://www.cnblogs.com/bugY/p/2410140.html
Copyright © 2011-2022 走看看