Linux进程如何终止

Linux进程如何终止

 更新时间:2024年02月12日 18:31:13   作者:风吹雨淋  
这篇文章主要介绍了Linux进程如何终止问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

目录
  • 进程常见退出方法
  • return和exit都是给进程一个返回值
  • exit和_exit函数的区别
    • 区别1 冲刷缓冲区
    • 区别2 执行用户自定义的清理函数
  • 刷新缓存区的办法
    • 总结

      return和exit的数据就是进程的退出码

      一个程序运行起来是完成一个任务,只能通过退出码来表示当前进程任务处理的结果

      进程常见退出方法

      • main函数return,在其它函数中return只能退出该函数
      • ctrl+c:退出前台进程
      • exit和_exit函数,在其它函数中调用程序就可以直接退出了

      return和exit都是给进程一个返回值

      三种退出场景

      • 任务完美完成,正常退出
      • 任务没有完成,正常退出
      • 异常退出
      • 正常退出一定是设置了退出码之后正常结束的

      僵尸进程是退出,但是资源没有完全被释放,是为了保存退出原因(保存在PCB中)

      exit和_exit函数的区别

      exit是库函数,谁调用谁退出

      void exit (int ststus)

      status:进程退出的状态码_exit是系统调用函数,谁调用谁退出

      void _exit (int status)

      status:进程退出的状态码

      exit函数的内部封装了_exit函数,exit函数在退出进程的时候比_exit函数多做两件事

      • 1.刷新缓冲区(换行有刷新缓冲区的功能)
      • 2.执行用户自定义的清理函数

      区别1 冲刷缓冲区

      缓冲区:其实就是内存中临时存储数据的一块空间,这样做的目的是为了减少与物理内存交互的次数

      现象:一秒后hello才显示到屏幕上

      实质:打印hello并不是直接在屏幕上输出,是先缓存在内存中,然后再在缓冲区中将其内容冲刷出来;

      加不加 \n 有一个本质区别:它是否刷新了缓冲区,

      也就是说将hello放在某个内存中,不加 \n 就没有主动刷新这个缓冲区到屏幕上去,在当前程序结束后才放入缓冲区刷新至屏幕

      再次深入理解缓冲区:

      库函数的代码实现是在C运行时库中,系统调用函数的代码实现是在内核当中,上面所说的缓冲区是在C运行时库中;

      例如:

      • printf是一个库函数,调用printf后就把hello放入C运行时库定义的一个缓冲区(缓冲区是一块内存)中;
      • 加\n就主动刷新这块内存,将内存中内容输出到屏幕上,不加\n就要依赖别的刷新手段(程序结束刷新)

      exit函数是靠 _exit函数实现的

      现象:

      • 代码运行到exit(1)后结束,屏幕只显示hello,如果换成 _exit,则不会打印hello;

      原因:

      • 系统调用函数比C库函数更底层
      • exit是一个库函数(终止一个进程),缓冲区也在C运行时库中;所以该库函数在实现时会刷新缓冲区,所以可以看到hello;
      • _exit函数是系统调用函数,并不知道C运行时库,直接结束进程并且也不刷新缓冲区,不打印hello

      结论:exit会比_exit多做一件事,那就是刷新缓冲区

      区别2 执行用户自定义的清理函数

      先了解另一个知识点:

      回调函数:

      int atexit (void (*function) (void))

      参数:是函数指针类型,用来接收一个函数的地址,接收函数的返回值是void,参数也是void

      现象:先打印2,再打印1

      原因:

      • atexit函数是注册 了一个函数mycallback(mycallback函数就是回调函数);
      • 当main函数结束后才会调用刚注册的mycallback函数

      回调函数功能:

      • 先注册回调函数:调用atexit函数
      • 再调用回调函数:调用mycallback函数

      atexit函数是清理函数,本质是回调函数

      刷新缓存区的办法

      • main函数return返回之后
      • fflush:强制刷新
      • \n
      • exit函数

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

      您可能感兴趣的文章:

      • 在Linux命令行中终止进程的操作命令
      • linux中nohup和后台运行进程查看及终止
      • Linux下使用killall命令终止进程的8大用法实例详解
      • Linux多线程环境下 关于进程线程终止函数总结


      • Linux
      • 进程
      • 终止

      相关文章

      • Linux中查找工具的友好替代方案

        今天小编就为大家分享一篇关于Linux中查找工具的友好替代方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 2018-09-09

      • CentOS 7.2下安装部署邮件服务器(Postfix)的步骤详解

        Postfix 是一种电子邮件服务器,下面这篇文章主要给大家介绍了在CentOS 7.2下安装部署邮件服务器(Postfix)的步骤全过程,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。 2017-05-05

      • Linux下apache日志分析与状态查看方法

        使用apache服务器,有时候需要查看apache的日志与状态,那么就需要下面的命令了,特分享下方便需要的朋友 2013-01-01

      • linux中ftp服务搭建需要注意的地方

        本篇文章给大家总结了linux中ftp服务搭建需要注意的地方,大家学习后能够少走很多弯路,一起参考下吧。 2018-03-03

      • ubuntu环境下的php相关路径与修改方法

        这篇文章主要介绍了ubuntu环境下的php相关的路径,需要的朋友可以参考下 2020-12-12

      • 本地Windows远程桌面连接阿里云Ubuntu 16.04服务器的操作方法

        这篇文章主要介绍了本地Windows远程桌面连接阿里云Ubuntu 16.04服务器的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 2020-02-02

      • Linux在批量服务器管理中实用的PS1命令提示符格式实现方法

        PS1是神马?PS1是linux里头的一个默认的环境变量,至于当前系统的PS1是如何设置的,你可以使用命令“env|grep PS1”来查看 2015-09-09

      • 详解Win10 Bash/WSL调试Linux环境下的.NET Core应用程序

        本篇文章主要介绍了详解Win10 Bash/WSL调试Linux环境下的.NET Core应用程序 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-04-04

      • 详解Linux系统三种模式下的简单命令

        这篇文章主要介绍了Linux系统三种模式下的简单命令,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 2018-07-07

      • linux解决Tomcat内存溢出的问题

        下面小编就为大家带来一篇linux解决Tomcat内存溢出的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2016-12-12

      最新评论

      版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
      文章名称:《Linux进程如何终止》
      文章链接:https://zhuji.vsping.com/196720.html
      本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。