Linux 下结束进程的方法:正常与异常终止详解

王林
发布: 2024-07-18 22:11:07
原创
587 人浏览过

Linux 下结束进程的方法:正常与异常终止详解

在前两章中我们了解了创建进程,这一章我们来了解下,在linux下如何结束进程。

在linux中,有3种正常结束进程的方式和2种异常中止的方式:

1、正常结束:

a、在main函数中调用return。这个相当于调用exit。

b、调用exit函数,按这个函数在ANSIC中的定义,调用时将执行所有注册过的exit句柄,关掉所有的标准I/O流,而且并不处理文件描述符、多进程(父进程与子进程)、作业等,因此对linux系统而言并不健全。

c、调用_exit函数。exit被_exit调用linux培训,关掉一些linux特有的退出句柄。

2、异常中止

linux保存退出命令行_linux退出保存文件_linux下退出不保存

a、调用abort。这个似乎是第二种情形的特例,由于它形成一个SIGABRT讯号。

b、进程收到特定讯号,这个讯号可以是进程自己形成的(如abort函数),也可以来自其他进程或内核。诸如:进程试图访问越界的显存地址或则除数为零时linux模拟,内核就会形成讯号中断进程。

不管用何种方法结束进程,最终都要执行内核的同一段代码。这段代码关掉该进程打开的所有文件描述符,私访占用的显存等。

接出来我们来了解下exit和_exit函数

这两个函数在不同的头文件中:exit在stdlib.h中,_exit在unistd.h中

linux退出保存文件_linux下退出不保存_linux保存退出命令行

她们的具体调用方式如下:

voidexit(int__status)

void_exit(int__status)

参数status为退出的状态。

我们来看一下下边这两段代码:

linux保存退出命令行_linux下退出不保存_linux退出保存文件

图1

linux下退出不保存_linux退出保存文件_linux保存退出命令行

图2

linux退出保存文件_linux保存退出命令行_linux下退出不保存

linux保存退出命令行_linux下退出不保存_linux退出保存文件

图3

linux保存退出命令行_linux退出保存文件_linux下退出不保存

图4

图1的代码缺乏了n造成了没有复印出测试结束的句子,这是由于printf若果不加n,则信息是不会立即复印下来的,而_exit不会强制输出缓冲区中的数据,即通过printf/fprintf这类调用形成的仍未写入设备仍在缓冲中的数据就会遗弃,_exit时复印信息会遗失,而exit不会。假如有n,则直接复印下来,此时exit/_exit无区别

兄妹进程中止的先后次序不同会形成不同的结果

1.父进程先于子进程中止:

此种情况就是我们所说的孤儿进程。当父进程先退出时,系统会让init进程接管子进程。

2.子进程先于父进程中止,而父进程又没有调用wait函数

此种情况子进程步入僵死状态,而且会始终保持下去直至系统重启。子进程处于僵死状态时linux下退出不保存,内核只保存进程的一些必要信息以备父进程所需。此时子进程仍然占有着资源,同时也降低了系统可以创建的最大进程数。

哪些是僵死状态呢?

一个早已中止、但是其父进程仍未对其进行善后处理(获取中止子进程的有关信息,释放它仍占有的资源)的进程被称为僵死进程(zombie)。

3.子进程先于父进程中止linux下退出不保存,而父进程调用了wait函数

此时父进程会等待子进程结束。

以上是Linux 下结束进程的方法:正常与异常终止详解的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:itcool.net
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!