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

进程控制 ─── linux第15课

目录

进程控制

1.进程创建

(fork前面讲过了)

写时拷贝

进程终止

进程退出场景

退出码

进程终止方法


进程控制

1.进程创建

(fork前面讲过了)

在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程

#include pid_t fork(void); 
返回值:自进程中返回0,父进程返回子进程id,出错返回-1

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

  • 分配新的内存块和内核数据结构给子进程
  • 将父进程部分数据结构内容(pcb 虚拟进程空间 页表 )拷贝至子进程
  • 添加子进程到系统进程列表当中
  • fork返回,开始调度器调度

写时拷贝

        写时拷贝:申请内存,发生拷贝,进行数据修改,修改页表的物理内存,恢复权限.

并没有对原数据区进行覆盖

        通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。具体见下图:

父进程创建子进程时 ,子进程继承的页表中权限全是只读的 ,  如果子进程尝试修改,会触发系统错误(因为权限都是只读) 触发缺页中断(进行系统检测) 

        1.子进程如果修改代码段(代码段不能修改),会导致子进程被杀掉

        2. 子进程如果修改数据区, 则发生写时拷贝,也恢复了页表中的读写权限.

进程终止

进程退出场景

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

main函数的返回值(退出码)--->返回给父进程或者系统

echo $?  查看最近一个进程的退出码

退出码

        0:成功

        非零:错误   不同的数字代表不同的错误类型

进程终止方法

  1. main函数return      而其他函数return仅仅只是函数的调用结束,与main函数不同
  2. exit( )                    在代码的任意地方表示进程结束(会将缓冲区的内容刷新出来)推荐用
  3. _exit( )                  不会将缓冲区的内容刷新      

exit( )是上层,_exit( )是下层 

exit()=_exit() +fllush( )

return退出     return是一种更常见的退出进程方法。执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返回值当做 exit的参数。

示例

#include <unistd.h>
void exit(int status);
int main()
{
     printf("hello");
     exit(0);
}

运行结果:
[root@localhost linux]# ./a.out
hello[root@localhost linux]#
 
int main()
{
     printf("hello");
     _exit(0);
}

运行结果:
[root@localhost linux]# ./a.out
[root@localhost linux]#

相关文章:

  • 信号量(Semaphore)和文件锁(File Lock)
  • 第六章 流量特征分析-钓鱼邮件
  • RT-thread的MultiButton按键库的使用
  • Windows 系统下 Android 开发常用快捷键‌的整理
  • CentOS 7.9 上安装 Docker Compose
  • cmake、CMakeLists.txt、make、ninja
  • 【Flink银行反欺诈系统设计方案】5.反欺诈系统全生命周期设计
  • 深入浅出:UniApp 从入门到精通全指南
  • nacos和Eureka的学习
  • python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据
  • 《谈判力》核心原则解读
  • “RStudio UI“快速指南
  • MiniMind用极低的成本训练属于自己的大模型
  • 前后分离文件上传案例,前端HTML,后端Net6开发的webapi(完整源代码)下载
  • 【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 与 JSP 的协作:MVC 模式的雏形
  • 《ARM64体系结构编程与实践》学习笔记(五)
  • 电脑的系统版本是windows7的,下载pycharm的哪个版本比较好呢?
  • 组合逻辑和时序逻辑
  • 每日一题----------匿名内部类的注意事项
  • SpringCloud注册中心-eureka
  • 美俄亥俄州北部发生火车撞人事故,致2人死亡、至少1人失踪
  • 家国万里·时光故事会|科学家伉俪,用玉米书写家国情怀
  • 19国入境团抵沪并游玩,老外震惊:“怎么能有这么多人?”
  • CBA官方对孙铭徽罚款3万、广厦投资人楼明停赛2场罚款5万
  • “先增聘再离任”又添一例,景顺长城基金经理鲍无可官宣辞职
  • 广州医药集团有限公司原党委书记、董事长李楚源被“双开”