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

linux系统编程:多任务编程(进程1)

1.进程

  进程:(进行中的程序)--正在运行的程序 (动态的) ---内存 
  程序的一次执行过程!

  一个程序一个程序 可以 对应多个进程
   程序 -- a.out (可执行程序) ---静态的
   程序 加载 到内存 运行起来 成为了 进程。 

   进程是 程序运行的实体。

   程序 = 数据+代码

    

2.进程的组成

  进程 = pcb + text|data|bss|堆|栈

   宏观并行,微观串行。

  pcb

   

3.进程状态

   三态模型

    

linux下的模型

4.linux下进程的命令

  ps  -elf  |  grep  程序名    //主要查看父子进程       包含  pid      ppid //parent pid

  eg:  ps   -elf  | grep a.out   //査看 a.out 进程

  ps aux grep | 程序名    //主要查看某个而进程的pid号及状态信息

 eg:  ps aux  grep | a.out    //查看 a.out

 pstree   -sp   pid号/   /用途,查看 父子进程间的关系(以树形图的方式展现包含了pid号)
   kill    //杀死---给进程发信号
   eg:kill  -l    //查看 kill可以发送的信号

   kill   - 9   pid号    //给指定的pid号发9号信号

  ki11 -19 pid号   //暂停进程      kill -18 pid号;  //恢复进程
  killall     //可以指定进程名称这种方式发送信号

 eg:kill -9 a.out //表示给所有叫a.out的进程发信号

5.linux系统

   R --- 运行或可运行     -就绪态

   S --- 可中断的睡眠态

   D --- 不可中断的睡眠态

   T --- 暂停态

    Z --- 僵尸态

6.创建一个进程

   fork();

   

  功能:

   创建一个进程(child process 子进程)

    通过复制调用进程复制的子进程

返回值     : 成功   在父进程中返回了子进程的pid号     在子进程返回了0

                    失败    在父进程中返回了-1并且没有子进程被创建

fork之后,父进程和子进程都是从fork之后的下一句话开始执行。

7.进程的执行

    

8.进程的结束

    正常结束:•使用 exit() 函数:这是最常见的进程正常结束方式。exit() 函数由 C 标准库提供,它会立即终止进程并返回一个状态码给父进程。  

     异常结束:•信号处理:进程可以因为接收到特定的信号而结束,例如 SIGTERM(终止信号)或 SIGKILL(强制终止信号)。这些信号通常由操作系统发送,也可以由其他进程发送。运行时错误:当程序遇到不可恢复的错误时,如段错误(SIGSEGV)或浮点异常(SIGFPE),进程会被异常终止。

    当进程结束时,操作系统会保留一个称为“退出状态”的值。这个值可以被父进程捕获,用于判断子进程是否正常结束。在 UNIX 和类 UNIX 系统中,父进程可以使用 wait() 或 waitpid() 系统调用来获取子进程的退出状态。

 9.进程结束时资源的回收  - 僵尸态

       在操作系统中,僵尸进程(Zombie Process)是指一个已经结束但其父进程尚未对其进行适当清理的进程。僵尸进程本身并不占用任何资源,但它仍然存在于进程表中,占用一个进程表条目,直到其父进程通过 wait() 或 waitpid() 系统调用来回收它为止。

      父进程先于子进程结束:如果父进程在子进程结束之前就已经结束,那么子进程就会变成孤儿进程,并被 init 进程(PID 1)收养。此时,子进程是一个后台进程,init 进程会负责回收孤儿进程,但在这之前,子进程会处于僵尸状态。

      父进程没有调用 wait() 或 waitpid():如果父进程创建了子进程,但在子进程结束之前没有调用 wait() 或 waitpid() 来回收子进程的状态信息,那么子进程就会变成僵尸进程。

  

10. 1.32位的平台,每个进程拥有独立的4G内存空间(虚拟的)

       2.每个进程运行在各自独立的4G内存空间中。

       

    3.父子进程间,数据相互独立,不受影响。

    4.父子进程运行的顺序,不确定。取决于操作系统---先调度谁 。

    判断 fork() && fork() ||  fork ()  这个式子中有几个进程

    

                       

  有5个进程

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Python快速入门和实践019】Python常用脚本-查看视频信息并压缩视频
  • C语言家教记录(六)
  • 【Qt】QWidget的toolTip属性
  • 函数递归那些事
  • MySQL基础练习题47-判断三角形
  • haproxy实验-2
  • Asciidoc 转化为 CSDN 帖子,完美数学公式
  • Ubuntu20.04 运行深蓝路径规划hw1
  • 微软披露Office最新零日漏洞,可能导致数据泄露
  • C语言相关
  • python从入门到精通:基础语法讲解
  • C++:std::pair的定义及用法
  • Python基础知识学习总结(一)
  • 设计模式---简单工厂模式
  • Bazaar v1.4.3 任意文件读取漏洞复现(CVE-2024-40348)
  • 230. Kth Smallest Element in a BST
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • extract-text-webpack-plugin用法
  • Python3爬取英雄联盟英雄皮肤大图
  • React组件设计模式(一)
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • SpringCloud集成分布式事务LCN (一)
  • vue-cli在webpack的配置文件探究
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 排序算法学习笔记
  • 我有几个粽子,和一个故事
  • 想写好前端,先练好内功
  • 以太坊客户端Geth命令参数详解
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # 透过事物看本质的能力怎么培养?
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #define,static,const,三种常量的区别
  • #数据结构 笔记一
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (一)Docker基本介绍
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • *** 2003
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 8.0 发布到 IIS
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET IoC 容器(三)Autofac
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net 微服务 服务保护 自动重试 Polly
  • .net对接阿里云CSB服务
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法