进程的终止


一、进程终止

进程创建出来之后,会退出,退出就是一个进程终止,那么进程终止有哪些场景?就如写程序程序终止一样,终止是有三种情况,它的代码运行完,结果正确;代码运行完结果不正确;代码没有运行完因为异常就终止了。而对于代码运行正确的,用户并不惯性它是如何正确的,也不会问他什么原因,但是一旦出错了,就会想要了解是如何错误的,错误原因是什么?而关心错误原因是谁会关心,自然是在乎进程的人,也就是进程它的父进程会关心是为何错误的,因为父进程交给子进程做工作,然后子进程没有把工作做完或者失败了,父进程会关心它为何会失败及失败原因。
就如main函数代码执行完毕退出,return 0退出一般
在这里插入图片描述
它返回0,是代表运行完毕结果正确,这样可不必知道其正确原因,这个0代表这进程的退出码,也是表征代码的运行结果是否正确的一个关键,然后这个退出码会被它的父进程拿到就是告诉它的父进程它的运行结果是正确的,退出码就是给它的父进程返回一个运行的结果。Main函数的返回值,本质是表示进程运行完成结果是否时是正确的结果,如果不是,可以用不同的数字来表示不同的出错原因。但是这通常是由计算机识别的,就算是你知道它的这个退出数字,但是你不知道这个数字代表什么意思,可能会造成许多误解。如:学校考试,顺利考完(代码运行完毕)及格(正确),不及格(不正确),若是考试不及格,那么具体考多少分,给定不及格规定一个不及格原因的数字例1:考试肚子疼。2:考试笔没有墨水了…自己默默设定了出错原因的数字,然后当放学回到家中,家长问到考试成绩时,你就给他们说1,然后家长就会想是考了第一名还是考了倒数第一名或者是1分,若是家长想到是倒数第一名,那么你可就是糟糕了,而这个数字只有你自己才知道它是什么含意,但是这样做其他人并不知道,而要让其他人知道原因,你既要有数字,也要有解释这个数字的信息也就是退出码描述。

二、退出码与退出码描述

Linux中查看进程退出码echo $?
在这里插入图片描述
echo $?表示命令行中最近一个进程运行的退出码,也就是退出码会保存到?这个变量中这就类似于环境变量了
在这里插入图片描述
当查看一个不存在的文件时,会提示这样一段信息,然后用查看它的退出码为1,这1表示这个命令执行的退出码。
而为什么命令行让你执行某种指令,因为bash要让你执行某种任务,它不便行动所以交给你来完成,但是呢你完成的时候不管成不成功都是要告诉bash的,返回给bash执行信息,但是又不是每次都存在返回信息,所以就存在了退出码,将规定退出码表征对应的退出信息,然后退出数字让计算机去看,最终将退出码转换为字符信息交给人去看退出信息。那么有哪些错误码及错误码描述?用strerror查看错误码描述信息 man strerror
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
一百多种错误码描述信息。strerror系统给我们的错误码对应错误描述信息,若是不想延用系统提供的可以自己写一套规则,也就是一个字符指针数组。
以下几个错误码对应错误信息描述
堆上申请空间失败

在这里插入图片描述
errno是错误码
空指针的解引用
在这里插入图片描述
除0错误
在这里插入图片描述
这些时较为典型的错误了,错误码可以用errno查看,然后用库函数strerror查看errno错误码对应的错误信息。而进程退出还有一种场景,出现异常!那么对于出现异常的进程,不管是在代码执行完毕出的异常还是在中途出的异常都不重要,只要是出了异常就会直接终止进程也不管对不对,就如考试一样,在发现作弊后那不管这个人考了多少分,都不重要了,反正他作弊了成绩就是为假的!其实进程出现异常一般是进程收到了一个信号
在这里插入图片描述

三、exit和_exit

man exit
在这里插入图片描述
参数:status 定义了进程的终止状态,父进程通过wait来获取该值
虽然status是int,但是仅有低8位可以被父进程所用。所以_exit(-1)时,在终端执行$?发现返回值是255
在这里插入图片描述

exit会使一个进程直接退出,然后不再执行后续的代码
在这里插入图片描述
exit是一个c语言库函数接口,那么它在底层就会封装一个系统调用接口,这个接口是_exit
_exit
在这里插入图片描述
_exit也是一个进程退出的方式,只不过它是一个系统调用接口
在这里插入图片描述
在这里插入图片描述
它会立即退出终止进程,printf函数会将数据先写到缓冲区中,然后采用按行刷新的方式将内容刷新到文件中,加了\n,printf调用完成就会刷新缓冲区,若是不加\n就会将数据一直在缓冲区堆积,直到遇到\n或者等待进程结束才将数据从缓冲区中刷洗出去。eixt在终止进程时会将缓冲区中的数据进行刷新,但是_exit立即退出进程不会将缓冲区数据刷新!
exit
在这里插入图片描述
_exit
在这里插入图片描述
exit最后会调用_exit, 但在调用_exit之前,还做了其他工作:

  1. 执行用户通过 atexit或on_exit定义的清理函数。
  2. 关闭所有打开的流,所有的缓存数据均被写入
  3. 调用_exit

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

相关推荐

  1. es终止快照恢复进程方法

    2024-03-29 11:56:02       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 11:56:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 11:56:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 11:56:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 11:56:02       20 阅读

热门阅读

  1. 图片文件格式的文件头标识

    2024-03-29 11:56:02       20 阅读
  2. 【PyTorch Tensor】PyTorch Tensor编程教学:基础与实战

    2024-03-29 11:56:02       21 阅读
  3. python爬虫-bs4

    2024-03-29 11:56:02       17 阅读
  4. 面试题解析:bind,call,apply的区别(2)

    2024-03-29 11:56:02       18 阅读
  5. Vue如何实现自定义组件改变组件背景色?

    2024-03-29 11:56:02       17 阅读
  6. 关于gson解析把int类型转成浮点型的问题

    2024-03-29 11:56:02       15 阅读