原文地址:    https://www.cnblogs.com/aspirant/p/11543456.html

https://www.cnblogs.com/aspirant/

进程状态转换图

kill和kill -9,两个命令在linux中都有杀死进程的效果,然而两命令的执行过程却大有不同,在程序中如果用错了,可能会造成莫名其妙的现象。

执行kill(不加 -* 默认kill -15)命令,系统会发送一个SIGTERM信号给对应的程序。当程序接收到该signal信号后,将会发生以下事情:

程序立刻停止

当程序释放相应资源后再停止

程序可能仍然继续运行

大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。但是也有程序可能接收信号后,做一些其他的事情(如果程序正在等待IO,可能就不会立马做出响应,我在使用wkhtmltopdf转pdf的项目中遇到这现象),也就是说,SIGTERM多半是会被阻塞的。

然而kill -9命令,系统给对应程序发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。

小结:在使用 kill -9 前,应该先使用 kill -15,给目标进程一个清理善后工作的机会。如果没有,可能会留下一些不完整的文件或状态,从而影响服务的再次启动。

Perl语言专家Randal Schwartz在一篇短文里这样写:

no no no.不要使用kill -9.

它没有给进程留下善后的机会:

1) 关闭socket链接

2) 清理临时文件

3) 将自己将要被销毁的消息通知给子进程

4) 重置自己的终止状态

等等。

通常,应该发送15,等一两秒钟,如果没效果,发送2,如果还不行,发送1。如果还不行,那你应该把那个程序删掉,因为那个程序写的太烂了!

不要使用kill -9。不要用收割机来修剪花盆里的花。

总之,在使用kill -9前,你应该先使用kill -15,给目标进程一个清理善后工作的机会。(进程也许无法捕捉或直接忽略SIGKILL信号,但它们可以,通常也是能够捕捉SIGTERM信号的。)如果你不留机会让进程完成清理工作,它们会留下一些不完整的文件或状态,当系统重启时,程序将无法理解这些状态。

strace/truss,ltrace和gdb都是查看一个卡住的进程因何卡住的好工具。(Solaris里的truss -u非常好用;)Solaris里还有一些非常有用的/proc相关的工具,有一些已经被移植到了Linux上。

kill 和 kill -9 的区别相关推荐

  1. kill和kill -9

    kill和kill -9 很多时候,会有人建议你,如果kill杀不掉一个进程,就用kill -9. 为什么? kill是Linux下常见的命令.其man手册的功能定义如下: kill – send a ...

  2. java 捕获sigkill,如何杀死由kill或kill -9上的脚本启动的进程生成的所有子进程

    我有一个名为Launcher.sh的shell脚本,它由java进程执行 . java进程在内部使用ProcessBuilder来执行bash脚本 . 在Launcher.sh中,我有以下代码 #!/ ...

  3. linux常用命令kill-9,【Linux常用命令】Linux kill, killall, kill -9,

    kill + PID kill -9 + PID  加上-9 是强制终止的信号 killall 是直接加进程名(但是进程名一定要完整) 就能杀掉这些进程 1) 查看进程的方法: ps -ef  或者  ...

  4. kill 和 kill -9

    kill 和 kill -9 很多时候,会有人建议你,如果kill杀不掉一个进程,就用kill -9. 为什么? kill是Linux下常见的命令.其man手册的功能定义如下: kill – send ...

  5. 2023-04-03 Linux中杀死进程kill和killall命令的区别,着重介绍killall

    一.Linux killall 用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程.kill 命令杀死指定进程 PID,需要配合 ps 使用,而 killall 直接对进程对名字进行操 ...

  6. kill与kill -9的区别

    kill命令格式: kill -Signal pid pid是进程号,可以用 ps 命令查出 signal是发送给进程的信号, 默认参数下,kill 发送SIGTERM(15)信号给进程,告诉进程,你 ...

  7. Linux: kill, pkill, killall命令的区别

    一.概要 1. kill 命令根据进程号(pid)杀死单个进程 2. pkill 命令根据名字杀死该名字下的所有进程 3. killall 命令根据名字杀死该名字下的所有进程,跟pkill类似 二.k ...

  8. 说说kill和kill -9

    kill是linux中被误解很深的一个命令, 很多人以为它是杀死一个进程, 其实不然. 关于这一点, 我在之前的博文中已经提到过了. kill的真实含义是, 向进程发送信息. kill  1234   ...

  9. linux命令 kill 9,kill 9命令的理解与运用

    kill命令格式: kill -Signal pid pid是进程号,可以用 ps 命令查出 signal是发送给进程的信号,TERM(或数字9)表示"无条件终止" 下面是一个例子 ...

最新文章

  1. 一文详述Attention最新进展
  2. 5G最完整的PPT教材
  3. C++ :常用文件、文件夹操作汇总
  4. linux内核cpu负载计算,CPU 负载 — The Linux Kernel documentation
  5. smarty中js的调用方法
  6. jedis开发过程中遇到的问题及其解决方法
  7. 你还在为查询滑动窗口最大值发愁吗?点开看最高效率解法!
  8. Python数据分析中Groupby用法之通过字典或Series进行分组
  9. MySQL的详细安装教程和配置过程(附安装包)
  10. 如何使用MonoDevelop调试Unity3D脚本
  11. onvif 模拟摄像头_ONVIF协议测试工具(ONVIF Device Test Tool)
  12. java 计算器 junit测试_Java—Junit单元测试
  13. css规则定义的分类,.css规则定义
  14. java计算机毕业设计口红专卖网站MyBatis+系统+LW文档+源码+调试部署
  15. 申宝优配-强者恒强还将继续
  16. 陈平 教授的演讲(经济学家)
  17. 网络分层和数据封装与解封简括
  18. qq撤回的消息怎么找回 python_Python实现微信中找回好友、群聊用户撤回的消息功能示例...
  19. 显示器该怎么选--关于色域的介绍
  20. android上传图片到PHP后台全过程

热门文章

  1. python处理wps表格数据匹配_两个excel表格数据匹配wps-WPS怎样用VLOOKUP引用另一个表格的数据...
  2. 安卓手机查看连接到热点设备的ip地址
  3. RHEL5 Oracle 11G R2 RAC 静默安装 (三) rdbms安装 dbca 建库
  4. RFID图书馆藏书防盗安全门门禁系统的应用分析
  5. CentOS7 安装Samba
  6. 搞笑的chitgpt
  7. 大数据技术与应用实训心得_大数据心得体会
  8. 【论文笔记】Program synthesis using natural language
  9. 区块链技术涉及哪些编程语言?
  10. OSPF的三张表(邻居表、LSDB表、路由表)、LSA、LSDB、SPF与路由表之间的关联、OSPF建立的8种必要条件