当前位置: 首页 > news >正文

c/cpp - 多线程/进程 多进程

c/cpp - 多线程/进程 多进程

  • 多进程
    • 创建多进程
    • 进程等待

多进程

宏观上 两个进程完全并发的
父子进程具有互相独立的进程空间
父进程结束,不影响子进程的执行

创建多进程

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>int main(){pid_t pid;/* == eg1 ==*/// while (1)// {//     // 进程ID号//     printf("pid = %d\n",getpid());//     // 该进程 的 父进程的ID号//     printf("pid parent = %d\n",getppid());// }// /* == eg2 == */// printf("pid = %d\n",getpid());// // 复制一个进程当作子进程// // 如果调用成功,返回子进程id号,非0,子进程的id好为0// pid =fork();// printf("pid = %d\n",pid);// printf("hell world"); // fork之后 父进程 子进程都执行该语句/* == eg3 ==*/pid_t pid1;pid_t pid2;pid1 =fork();pid2=fork();printf("pid1 = %d, pid2 = %d\n",pid1,pid2);// fork树/*A   -A  -A: pid1=id(B), pid2=id(C)-C: pid1=id(B)(拷贝出来的), pid2=0-B  -B: pid1=0, pid2=id(D)-D: pid1=0(拷贝出来的), pid2=0      */return 0;
}

例子2

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>int main(){pid_t pid;pid =fork();printf("pid = %d\n",pid);/*A   -A pid=id(B)-B pid=0   *//*宏观上 两个进程完全并发的 父子进程具有互相独立的进程空间父进程结束,不影响子进程的执行*/// 根据id号 区分父进程 子进程,执行不同的任务if (pid>0) // parent process{while (1){printf("parent process running...\n");sleep(1);}}else if (pid==0) // child process{ while (1){printf("child process running...\n");sleep(1);}}else{printf("ERROR: fork failed\n");return -1;}return 0;
}

进程等待

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>int main(int argc,char* argv[])
{pid_t child_pid;int num;for (int i=1;i<argc;i++){switch (fork()){case 0: // 当前是子进程printf("child process %d start id= %d, sleep %s\n",i,getpid(),argv[i]);sleep(atoi(argv[i]));exit(0);break;case -1:perror("fork()\n");exit(0);default:break;}}/*A   -A break        -A  break               -A break-A3 exit运行之后结束,不再fork-A2 exit运行之后结束不在fork-A1 exit(子进程结束)不再fork*/num=0;// 表示主进程一直等待,直到所有子进程结束再结束主进程while (1){child_pid=wait(NULL); // wait表示多个子进程中的一个结束就返回if (child_pid==-1) // -1 表示没有可以正在运行的子进程{printf("no more child  process runnig\n");exit(0);}num++;printf("wait() child pid=%d over,num=%d\n",child_pid,num);}return 0;
}/*child process 2 start id= 24667, sleep 10child process 1 start id= 24666, sleep 5child process 3 start id= 24668, sleep 15wait() child pid=24666 over,num=1wait() child pid=24667 over,num=2wait() child pid=24668 over,num=3no more child  process runnig*/
http://www.lryc.cn/news/36763.html

相关文章:

  • MySQL必知必会 | 存储过程、游标、触发器
  • 优化Facebook广告ROI的数据驱动方法:从投放到运营
  • 动态规划入门经典问题讲解
  • 快速入门深度学习1(用时1h)
  • PaddleOCR关键信息抽取(KIE)的训练(SER训练和RE训练)错误汇总
  • 信息收集之搜索引擎
  • Flutter(四)布局类组件
  • 【黑马】Java基础从入门到起飞目录合集
  • PMP考前冲刺3.10 | 2023新征程,一举拿证
  • JavaScript Math常用方法
  • 【C++】模板进阶
  • 三板斧解决leetcode的链表题
  • 全生命周期的云原生安全框架
  • 【本地网站上线】ubuntu搭建web站点,并内网穿透发布公网访问
  • 电脑怎么重装系统?教你轻松掌握这些方法
  • leetcode-每日一题-2379(简单,字符串)
  • SLF4J日志框架在项目中使用
  • Spark MLlib 模型训练
  • Python中变量的作用域精讲
  • 数据仓库工程师的工作职责的相关介绍
  • ESP UART 介绍
  • 第十三届蓝桥杯省赛Python大学B组复盘
  • linux入门---vim的配置
  • Python简写操作(for、if简写、匿名函数)
  • 毕业设计常用模块之温湿度模块DHT11模块使用
  • Cadence Allegro 导出Design Rules Net Shorts Check(DRC)Report报告详解
  • 第 46 届世界技能大赛浙江省选拔赛“网络安全“项目C模块任务书
  • C++:详解C++11 线程(一):MingGW 各版本区别及安装说明
  • 第十二章 ArrayList和 LinkedList的区别
  • 案例06-复用思想的接口和SQL