• 【lesson14】进程控制之进程终止


    进程创建结尾

    写时拷贝

    上个博客在进程创建的时候我们提到了写时拷贝技术,那么到底什么是写时拷贝技术。

    ==通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。==具体见下图:
    在这里插入图片描述
    因为有写时拷贝技术的存在,所以父子进程得以彻底分离,完成了进程独立性的保证。
    写时拷贝是一种延时申请技术,可以提高整机内存使用率。

    进程终止

    进程终止时操作系统做了什么?

    进程终止时OS释放进程申请的相关内核数据结构和对应的数据和代码。
    本质是释放系统资源。

    进程终止常见的方式

    常见方式:
    1.代码跑完,结果正确
    2.代码跑完,结果不正确
    3.代码没跑完,程序崩溃

    例子:
    在这里插入图片描述
    我们知道main函数有返回值return 0,那么main函数返回值的意义是什么?一定是0吗?
    在这里插入图片描述
    返回值的意义:返回给上一级进程,用来评判该进程执行结果用的。可以忽略

    main函数返回值不一定是0:
    0:success
    非0:标识运行结果不正确

    代码演示:
    在这里插入图片描述
    在这里插入图片描述
    我们可以看到运行结果不正确因为最后返回值ret是1,代码中我们temp少加了一个数所以结果会不正确。

    那么main函数返回值一共有多少个呢?
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    从上面我们可以知道,非0值有许多个,不同的非0值就可以标识不同的错误原因
    有了返回值在我们的程序在运行结束之后,如果结果不正确可以方便定位错误的原因细节!

    程序崩溃的时候,退出码无意义!一般而言退出码对应的return语句,没有被执行。
    在这里插入图片描述
    在这里插入图片描述

    用代码如何终止一个进程?

    1.return语句就是终止进程,当然在main函数中的return语句才有用。
    2.exit函数,exit函数不管在哪个函数中都是直接终止掉进程。
    演示:
    在这里插入图片描述
    在这里插入图片描述
    3._exit函数,作用和exit一样
    演示:
    在这里插入图片描述
    在这里插入图片描述
    4.exit函数和_exit函数的区别
    exit函数是C标准库提供的一个函数
    _exit函数是系统接口,属于系统调用

    使用上的区别:
    exit:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    我们可以看到当用exit函数时,先停顿3秒然后输出hello world。
    _exit:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    从上面可以看到,_exit最后什么都没有输出。这是为什么呢?
    因为_exit是系统调用,而exit是C标准库提供的。
    我们知道printf的数据是保存在“缓冲区”中的,请问这个“缓冲区”在哪里指的是什么缓冲区?谁维护?
    从上面函数调用我们可以得知,一定不再操作系统内部!因为如果是OS维护的,缓冲区_exit也能刷出来。

  • 相关阅读:
    Case When语句详解SQL中Case When的用法
    How to install PostgreSQL in Centos8
    我们来浅谈代码语言的魅力
    基于python的大数据反电信诈骗管理系统的设计与实现
    【洛谷算法题】P3954-成绩【入门1顺序结构】
    ardupilot 自动控制系统的要求
    技术教程:Windows环境下如何部署FTP服务器传输EasyCVR?
    2024电脑录屏软件排行第一Camtasia喀秋莎
    MySQL【基本select语句】
    计算机毕业设计Java贺卡商城设计与实现(源码+系统+mysql数据库+lw文档)
  • 原文地址:https://blog.csdn.net/m0_67077469/article/details/134015856