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

【Linux】进程控制(一)

 

1. 进程创建

(一)认识fork函数

从已存在进程中创建一个新进程(新进程为子进程,而原进程为父进程)

进程调用fork,当控制转移到内核中的fork代码后,内核做:

  1. 分配新的内存块和内核数据结构给子进程
  2. 将父进程部分数据结构内容拷贝至子进程
  3. 添加子进程到系统进程列表当中
  4. fork返回,开始调度器调度

注意:

  1. 当一个进程调用fork之后,就有两个二进制代码相同的进程。进程是独立的,互不干扰对方运行
  2. fork之后,谁先执行完全由调度器决定

(二)fork函数返回值

  1. 子进程返回0
  2. 父进程返回子进程的 pid

(三)写实拷贝

通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自管理数据

(四)fork常规用法

  1. 一个父进程希望复制自己,使父子进程同时执行不同的代码段
  1. 一个进程要执行一个不同的程序(发生进程替换)

(五)fork调用失败的原因

  1. 系统中有太多的进程
  2. 实际用户的进程数超过了限制

2. 进程终止

(一)进程退出场景

  • 代码运行完毕,结果正确
  • 代码运行完毕,结果不正确
  • 代码异常终止

(二)进程常见退出方法

  1. 正常终止(可以通过 echo $? 查看进程退出码 $? : 表示最近一次的进程退出时候的得到的退出码
  • 从main返回

main函数的返回值,本质表示:进程进行完成时,是否得到正确的结果,如果不是,可以用不同的数字代表不同的出错原因

  • 调用exit

exit : 中止一个进程

注意:

  1. exit 在任意一个位置被调用,表示进程直接退出
  2. return 在函数里面代表函数结束,在main函数里面代表进程退出

exit 使用

  • _exit

_exit : 中止一个进程

exit 和 _exit 的区别:

exit 执行时,会冲刷缓冲区的数据 (即可以看到数据刷新的结果)

_exit 执行时,不会冲刷缓冲区的数据

注意:

缓冲区在用户区

$? 的使用

return返回的是退出码,且子进程退出时得到的退出码会给父进程

第一个 echo $? 得到的退出码是执行 ./test 进程的

第二个 echo $? 得到的退出码是执行 上一个echo 进程的

. . .

注意:

系统提供的错误码和错误码描述的有对应关系的

错误码及对应的错误码描述

注意:

strerror 可以用过退出码得到退出码描述

errno 可以储存最近一次错误码

  1. 异常退出

ctrl + c,信号终止

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 简单实用的php全新实物商城系统
  • 使用Ansible进行自动化运维
  • 期货赫兹量化-种群优化算法:进化策略,(μ,λ)-ES 和 (μ+λ)-ES
  • Mysql-数据库课程设计图书管理系统
  • HTML5中canvas绘图基础详解
  • strlen函数模拟实现(嵌套函数调用)
  • Elasticsearch倒排索引
  • 资料分析系统课-刘文超老师
  • ImportError: cannot import name ‘DglNodePropPredDataset‘ from ‘ogb.nodepropp
  • 超时重试与风险学习
  • Linux 删除虚拟环境命令
  • 【前端】CSS控制style样式失效
  • 1 模拟——67. 二进制求和
  • mac m2 安装 nvm
  • Java操作Elasticsearch的实用指南
  • JavaScript 如何正确处理 Unicode 编码问题!
  • CSS居中完全指南——构建CSS居中决策树
  • ESLint简单操作
  • github指令
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java到底能干嘛?
  • java概述
  • java中具有继承关系的类及其对象初始化顺序
  • React系列之 Redux 架构模式
  • Redis中的lru算法实现
  • SpringBoot几种定时任务的实现方式
  • vue-loader 源码解析系列之 selector
  • Vue学习第二天
  • 包装类对象
  • 闭包--闭包之tab栏切换(四)
  • 从PHP迁移至Golang - 基础篇
  • 官方解决所有 npm 全局安装权限问题
  • 诡异!React stopPropagation失灵
  • 前端临床手札——文件上传
  • 前端面试之闭包
  • 前端之React实战:创建跨平台的项目架构
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何优雅地使用 Sublime Text
  • 算法---两个栈实现一个队列
  • 新版博客前端前瞻
  • MyCAT水平分库
  • ​​​【收录 Hello 算法】9.4 小结
  • ​520就是要宠粉,你的心头书我买单
  • ​批处理文件中的errorlevel用法
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #pragma once
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (12)目标检测_SSD基于pytorch搭建代码
  • (C11) 泛型表达式
  • (回溯) LeetCode 40. 组合总和II
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)