操作系统 — 进程的退出(exit)
来源:互联网 发布:家庭千兆网络布线 编辑:程序博客网 时间:2024/06/06 00:25
进程退出
linux下正常的退出方式:
1.在main函数中使用了return返回. (return之后把控制权交给调用函数)
2.调用exit()或者_exit; (exit()之后把控制权交给系统)
异常退出:
1.调用abort函数
2.进程收到某个信号,而该信号是程序中止.
不管是哪一种退出方式,最后都会执行内核中的同一代码,这段代码用来关闭进程所用到的已经打开的文件描述符所占用的内存和资源.
exit和_exit函数说明
创建进程使用fork()函数,执行进程使用exec函数族,终止进程则使用_exit()和exit()函数. 当进程执行到exit()或_exit()函数时,进程会无条件的
停止剩下的所有操作,清楚各种数据结构,并终止本进程的运行. 但是,这两个函数还是有区别的. 他们的调用过程如下:
从图里可以看出来,_exit()函数的作用是: 直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构; 而exit()函数则在这
些基础上做了一些包装,在执行退出之前加了若干道工序. exit()函数和_exit()函数的最大区别就在于exit()函数在终止当前进程之前要检查该进程
打开过那些文件,把文件缓冲区中的内容写回文件,也就是图中的 "清楚I/O缓冲" 一项.
在Linux的标准函数库中,有一种被称为 "缓冲I/O" 的操作,其特征就是对应每一个打开的文件,在内存中都有一片缓冲区.每次读文件时,会联系读
出若干条记录,这样在下次读文件时就可以直接从内存的缓冲区当中读取; 同样的,每次写文件的时候,也仅仅是写入内存的缓冲区,等满足了一定的
条件时(如达到一定数量或遇到特定字符等,最典型的就是咱们的vim中使用的 : w命令),再将缓冲区中的内容一次性写入文件.
这种技术大大增加了文件读写的速度,但是也给编程带来了一点麻烦. 比如有些数据你认为已经被写入到文件中,实际上因为没有满足特定的条件,他
们还只是被保存在缓冲区内,这时用_exit()函数直接将进程关闭掉,缓冲区中的数据就会丢失. 因此,为了数据的完整性,请使用exit()函数.
各种退出方式的比较:
1.exit和return的比较,exit是一个函数,有参数.而return是函数执行完毕后的返回. exit把控制权交给系统,而return将控制权交给调用函数.
2.exit和abort的区别: exit是正常终止进程,而abort是异常终止.
3.exit和_exit的区别:
4.exit中的参数 如果为0代表进程正常终止,如果为其他值表示程序执行过程有错误发生,比如除数为0.
代码演示:
我们来使用代码来看看exit和_exit的区别呢~ 我们先认识一个操作,如果你想知道上一个程序的退出码是什么东西. 在linux下的指令行输入:
echo $? 就可以查看上一个程序的退出码了. 现在我们看下面的代码:
这个时候我们知道的exit在退出的时候,会刷新内存缓冲区,所以两句话都会打印出来,并且退出码为2.
然后我们在来看_exit的情况:
_exit会直接结束掉进程,所以呢我们可以看到第一句话,第二句不会出现在显示屏上. 退出码为2.
阅读全文
0 0
- 操作系统 — 进程的退出(exit)
- 进程的退出exit() --多进程编程
- 进程退出函数exit()
- linux进程退出的时exit,_exit区别和联系
- Linux中进程正常退出return和exit()的区别
- 进程学习:进程退出_exit()和exit()
- 进程退出(exit)处理函数 atexit
- 进程,函数退出exit和_exit
- C++学习007-使用exit退出进程
- Unix进程控制之2---exit进程退出函数
- LINUX退出当前进程——比较return、exit()和_exit()函数
- linux进程退出后操作系统是如何删除这个进程对应的内核资源
- 进程退出方法总结与exit函数&_exit函数
- Linux退出进程exit/_exit和等待子进程退出wait函数分析
- 万能的退出函数exit VS ExitProcess
- vfork 挂掉的一个问题拓展实验二 (子进程使用exit退出时候的栈帧)
- System.exit(n),正常退出与异常退出的区别
- python 退出程序sys.exit 的退出码
- MVC,MVP 和 MVVM 的图示
- 计算机网络和英特网
- Spring学习,Bean不同配置方式比较
- vb.net 教程 8-15 数据库操作实例1
- Viewpager的轮播
- 操作系统 — 进程的退出(exit)
- HDOJ1985 Conversions
- 综合知识点练习
- 每天一个linux命令(41):ps命令
- Codeforces Round #445 Div1 E:Mod Mod Mod (平衡树优化DP)
- 简单的卷积神经网络
- AngularJS入门
- Tomcat
- 【JZ2440】自我学习记录【知识点1】【操作系统理解】