一个进程由于以下5个原因中的一个终止
--main函数调用return;
--调用exit函数--C语言库函数;
--调用_exit函数--系统调用
--调用abort函数
--被一个信号终止。(kill函数)
前三个原因都是正常终止,后面两个是非正常终止。
无论进程为何终止,最后都执行相同的内核代码代码,关闭打开的文件,释放内存资源,和其他清理工作。
exit函数
int exit(int status);
exit导致程序正常终止,并且返回给父进程的状态(status)
exit的参数便是返回给父进程的状态码
在main函数中调用return和exit效果类似,但是在子函数中,return是退出当前函数,exit却是退出当前进程
exit()是C语言库函数,_exit()是系统调用,
exit在退出程序时,先调用终止处理程序,然后清除I/O缓冲,然后再调用系统调用_exit(),所以exit()可以打印出printf()函数中的字符串;
_exit()会直接进入到Linux内核操作,不会清除I/O缓冲
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> int main(int arg,char *args[])
{
/*Linux下,printf函数必须以'\n'结尾才会立刻输出到屏幕,
* 如果没有'\n'直到输出缓冲区满了以后才会打印到屏幕上(敲击换行也算)*/
printf("hello world!");
//exit(0); 打印 "hello world!"
_exit(); //不打印 "hello world!"
}
exit()会调用终止处理程序
atexit()可以注册终止处理程序,ANSIC规定最多可以注册32个终止处理程序
终止处理程序的调用与注册次序相反
int atexit(void (*function)(void));
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> void by1(void)
{
printf("by1 执行了!\n");
} void by2(void)
{
printf("by2 执行了!\n");
} int main(int arg,char *args[])
{
//注册终止处理程序
atexit(by1); atexit(by2);
printf("hello world!\n");
exit();
//_exit(0); _exit()不执行终止处理程序
/*
* 打印:
* hello world!
* by2 执行了!
* by1 执行了!
* 证明了先注册后执行
* */
}
abort函数
void abort(void);
abort导致程序异常终止
abort还可以让程序产生core,这是大多数调试器用户分析程序崩溃时的文件。
虽然任何打开的文件都被关闭了,但是abort仍然是个粗暴的调用,应该作为最后的手段来使用。
比如当你遇到一个很严重内存不足这样的错误,无法用程序的方式处理时再使用。
kill函数
int kill(pid_t pid,int sig);
exit,abort用来杀死进程自己。
kill函数用来杀死另一个进程。
参数pid指定一个要杀死的进程,而sig是要发送的新号,本章内容是杀死一个进程,所以只需要关注SIGKILL一个信号。
例如:kill(,SIGKILL);

Linux 结束进程的更多相关文章

  1. Linux结束进程到底有多少种方法?

    我们经常在Linux里使用kill命令来结束某后台进程.但kill命令实际上是向进程发送信号,并且有多种信号.终止运行一个程序只是其中一个信号而已.kill是根据进程号发送信号的,而另一个工具kill ...

  2. linux结束进程命令

    在linux中,进程之间通过信号来通信.进程的信号就是预定义好一个消息,进程能识别它并决定忽略还是做出反应. 信号 名称 描述 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL ...

  3. Linux 将进程放入后台执行,解决网络,ssh断开导致进程结束(nohup, setsid, &, disown)

    Linux 将进程放入后台执行,解决网络,ssh断开导致进程结束(nohup,  setsid,  &, disown) 1.nohup 命令 我们知道,当用户注销(logout)或者网络断开 ...

  4. 【Linux】进程的结构,创建,结束,以及程序转化为的进程的过程

    本文内容: 1.进程的结构 2.程序转化为进程的过程 3.进程的创建 4.进程的结束 背景知识: 1.进程是计算机中处于运行的程序的实体 2.进程是线程的容器 3.程序本身只是指令,数据以及组织形式的 ...

  5. Linux查看和结束进程命令详解

    在ubuntu中,终止一个进程或终止一个正在运行的程序,一般是通过 kill .killall.pkill.xkill 等进行. ----------------------------------- ...

  6. Linux编程 7 (实时监测进程 top, 结束进程kill,killall)

    一. 实时监测进程 top 在一篇里讲到ps命令在收集进程信息时非常有用,但它只能显示某个特定时间点的信息.想要观察那些频繁换进换出的内存进程趋势,用top命令是合适的.使用top命令如下图所示: 在 ...

  7. linux查看进程与结束进程

    查看所有进程 ps -ef ps -ef | grep 查找的进程名 结束进程 ps -ef | grep 查找的进程名 | grep -v grep | awk '{print $2}' | xar ...

  8. [转]❲阮一峰❳Linux 守护进程的启动方法

    ❲阮一峰❳Linux 守护进程的启动方法 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的由来 ...

  9. Server Develop (七) Linux 守护进程

    守护进程 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装 ...

随机推荐

  1. iOS仿京东分类菜单之UICollectionView内容

    在上<iOS仿京东分类菜单实例实现>已经实现了大部分主体的功能,本文是针对右边集合列表进行修改扩展,使它达到分组的效果,本文涉及到的主要是UICollectionView的知识内容,左边列 ...

  2. Caused by: java.lang.UnsupportedOperationException

    对Arrays.asList()返回的List进行操作之后报错Caused by: java.lang.UnsupportedOperationException 让我们来看一下Arrays.asLi ...

  3. Hibernate框架的基本搭建(一个小的java project的测试向数据库中插入和查询数据的功能)

    Hibernate介绍:Hibernate是一种“对象-关系型数据映射组件”,它使用映射文件将对象(object)与关系型数据(Relational)相关联,在Hibernate中映射文件通常以&qu ...

  4. 触发layoutSubviews的条件

    1. init初始化不会触发layoutSubviews 2. addSubview会触发layoutSubviews 3. 设置view的Frame会触发layoutSubviews,当然前提是fr ...

  5. IOS开发中返回值为null时的处理

    在IOS开发中,如果得到了null返回值很容易造成程序崩溃,null和nil的判断方法不同. nil的判断方法: if(data==nil) {      NSLog(@"data is n ...

  6. java网络---查找Internet

    连接到Internet的设备称为节点,计算机节点称为host. 为了区别每一台连接互联网的计算机,就有了Internet Protocol地址的概念. IPV4 & IPV6 我们以前默认的是 ...

  7. Visual Studio发布Web项目报错:Unable to add 'xxx' to the Web site. Unable to add file 'xxx'. The specified file could not be encrypted.

    背景 Visual Studio下的Web项目 现象 发布时遇到Unable to add 'xxx' to the Web site.  Unable to add file 'xxx'. The ...

  8. 深入剖析 Spring 框架的 BeanFactory

    说到Spring框架,人们往往大谈特谈一些似乎高逼格的东西,比如依赖注入,控制反转,面向切面等等.但是却忘记了最基本的一点,Spring的本质是一个bean工厂(beanFactory)或者说bean ...

  9. JSP过滤器Filter配置过滤类型汇总

    一.配置方法1 映射过滤应用程序中所有资源<filter>    <filter-name>loggerfilter</filter-name>    <fi ...

  10. 详细的图文教程来实现 eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上

    很多初学,尤其自学JavaWeb的朋友首次在eclipse下配置tomcat时,总会有种难下手的感觉,在此,通过图文解说的方法,最直观的向大家演示一遍该配置过程. 第一部分:eclipse环境下如何配 ...