• 2.1 进程控制之fork创建子进程


    fork()函数


    目标:熟悉fork创建一个和多个子进程子线程

    函数原型:pid_t fork(void); 

    返回值:成功返回:① 父进程返回子进程的ID(非负) ②子进程返回 0 ;

        失败返回-1

    注意:pid_t类型表示进程ID,它是有符号整型。

    例程一:创建一个子线程

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <unistd.h>
     4 int main(void)
     5 {
     6   pid_t pid;
     7   pid = fork();//创建子进程
     8   //调用出错
     9   if(pid == -1){
    10     printf("fork failed
    ");
    11     return 1;
    12   }
    13   else if(pid){ //返回值大于0,为父进程
    14     printf("The father return value is %d
    ",pid);
    15     printf("The father pid is %d
    ",getpid());
    16     printf("The father ppid is %d
    ",getppid());
    17     sleep(2);
    18   }
    19   else{    //返回值等于0,为子进程
    20     printf("The child return value is %d
    ",pid);
    21     printf("The child pid is %d
    ",getpid());
    22     printf("The child ppid is %d
    ",getppid());
    23  }
    24  return 0;
    25 }

    编译执行结果:

    例程二:循环创建多个子线程

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <unistd.h>
     4 
     5 int main(void)
     6 {
     7     int i;
     8     pid_t pid;
     9     for (i = 0; i < 5; i++) {
    10         pid = fork();
    11         if (pid == 0) {  //若为子进程则直接break退出
    12             break;
    13         }
    14     }
    15 
    16     if (i < 5) {  //子进程部分 
    18         sleep(i);
    19         printf("I'am %d child , pid = %u
    ", i+1, getpid());
    20 
    21     } else  {     //父进程
    22         sleep(i);
    23         printf("I'm parent
    ");
    24     }
    25     return 0;
    26 }

    编译执行结果:

    其中,getpid()函数: 获取当前进程ID,原型为pid_t getpid(void);

       getppid()函数:获取当前进程的父进程ID,原型为pid_t getppid(void);

  • 相关阅读:
    [转]距离的计算方法
    [转]C#算法题
    varchar和nvarchar区别
    Request.QueryString 的用法
    CommandBehavior.CloseConnection有何作用
    fileupload简单使用
    (二十九)商品管理-添加商品
    (二十八)分类信息的curd-分类信息删除
    (二十七)分类信息的curd-分类信息修改
    (二十六)分类信息的curd-分类信息添加
  • 原文地址:https://www.cnblogs.com/lxl-lennie/p/10212732.html
Copyright © 2020-2023  润新知