转载自:http://www.2cto.com/os/201305/215267.html

需要特别说明的是,SIGKILL和SIGSTOP这两个信号既不能被应用程序捕获,也不能被操作系统阻塞或忽略。

1、 kill pid与kill -9 pid的区别

        kill pid的作用是向进程号为pid的进程发送SIGTERM(这是kill默认发送的信号),该信号是一个结束进程的信号且可以被应用程序捕获。若应用程序没有捕获并响应该信号的逻辑代码,则该信号的默认动作是kill掉进程。这是终止指定进程的推荐做法。
 
        kill -9 pid则是向进程号为pid的进程发送SIGKILL(该信号的编号为9),从本文上面的说明可知,SIGKILL既不能被应用程序捕获,也不能被阻塞或忽略,其动作是立即结束指定进程。通俗地说,应用程序根本无法“感知”SIGKILL信号,它在完全无准备的情况下,就被收到SIGKILL信号的操作系统给干掉了,显然,在这种“暴力”情况下,应用程序完全没有释放当前占用资源的机会。事实上,SIGKILL信号是直接发给init进程的,它收到该信号后,负责终止pid指定的进程。在某些情况下(如进程已经hang死,无法响应正常信号),就可以使用kill -9来结束进程。
 
        若通过kill结束的进程是一个创建过子进程的父进程,则其子进程就会成为孤儿进程(Orphan Process),这种情况下,子进程的退出状态就不能再被应用进程捕获(因为作为父进程的应用程序已经不存在了),不过应该不会对整个linux系统产生什么不利影响。
2、 应用程序如何优雅退出
        Linux Server端的应用程序经常会长时间运行,在运行过程中,可能申请了很多系统资源,也可能保存了很多状态,在这些场景下,我们希望进程在退出前,可以释放资源或将当前状态dump到磁盘上或打印一些重要的日志,也就是希望进程优雅退出(exit gracefully)。
        从上面的介绍不难看出,优雅退出可以通过捕获SIGTERM来实现。具体来讲,通常只需要两步动作:
        1)注册SIGTERM信号的处理函数并在处理函数中做一些进程退出的准备。信号处理函数的注册可以通过signal()或sigaction()来实现,其中,推荐使用后者来实现信号响应函数的设置。信号处理函数的逻辑越简单越好,通常的做法是在该函数中设置一个bool型的flag变量以表明进程收到了SIGTERM信号,准备退出。
 
        2)在主进程的main()中,通过类似于while(!bQuit)的逻辑来检测那个flag变量,一旦bQuit在signal handler function中被置为true,则主进程退出while()循环,接下来就是一些释放资源或dump进程当前状态或记录日志的动作,完成这些后,主进程退出。
 

最新文章

  1. [转]java去除List中重复的元素
  2. iptables实现反向代理
  3. Innodb之拷贝InnoDB表从一服务器到另一台服务器2
  4. IIS 301 跳转
  5. (10)odoo控制器操作
  6. Linux 下绑定域名与IP地址
  7. nodejs之日志管理
  8. eclipse、MyEclipse实现批量改动文件编码
  9. Swift 简简单单实现手机九宫格手势密码解锁
  10. Spring——Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)
  11. 【转载】Static 关键字的作用
  12. POJ-1273-Drainage Ditches 朴素增广路
  13. 使用Python提取中文字符
  14. 修改oracle数据库内存报错
  15. Windos下pip配置豆瓣源
  16. php 对数组按照字符串长度排序
  17. TCP/IP 笔记 - Internet地址结构
  18. linux-shell系列8 netstat用法
  19. python成长之路五-文件操作
  20. bootstrap table导出功能无效报错Uncaught INVALID_CHARACTER_ERR: DOM Exception 5和导出中文乱码问题

热门文章

  1. 【转】Pro Android学习笔记(十五):用户界面和控制(3):Button控件
  2. 自己写的基于java Annotation(注解)的数据校验框架
  3. mybatis---demo1--(缓存)----bai
  4. mysql数据库之表与表之间的关系
  5. 没办法,SVD就讲的这么好
  6. web安全之XSS和CSRF
  7. [hdu1176]免费馅饼(数塔dp)
  8. 第5季-小试牛刀-项目开发\阶段2-新手上路\项目-移动物体监控系统\Sprint0-产品设计与规划
  9. ZOJ 3939 The Lucky Week (暴力找规律)
  10. win7 失去焦点解决方案