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返回一个负值;



  • 相关阅读:
    KL散度(相对熵)和交叉熵的区别
    将模型从 PyTorch 导出到 ONNX 并使用 ONNX Runtime 运行
    Numpy Boolean Indexing Mask(Numpy 布尔索引掩码 )
    python PIL 图像处理库(Pillow)简介
    YOLO v3 网络结构和源码详解
    PyTorch 下使用 Tensorboard
    Python vars() 函数
    python 的 Tqdm 模块
    Pytorch 中的模式设置:model.eval() 和 model.train()
    Pytorch 中的 zero_grad 使用方法
  • 原文地址:https://www.cnblogs.com/bugY/p/2410140.html
Copyright © 2011-2022 走看看