尽量避免直接使用 kill -9
2017-11-18 17:15
225 查看
kill -9
没有给进程留下善后的机会:
1)关闭socket链接;
2)清理临时文件;
3)将自己快要给销毁的消息通知给子进程;
4)重置自己的终止状态。
通常,应该发送 15,等一两秒钟,如果没有效果,发送2,如果还不行,发送1。
总之,在使用 kill -9 前,你应该先使用 kill -15,给目标进程一个清理善后工作的机会(进程也许无法捕捉或直接忽略SIGKILL信号,但他们可以,通常也是能够捕捉 SIGTERM 信号的)。
如果你不留机会让进程完成清理工作,他们会留下一些不完整的文件或状态,当系统重启时,程序将无法理解这些状态。
kill 命令
-l (L的小写):列出目前 kill 能够使用的信号有哪些,信号代表给予后面接的那个工作什么样的指示,用 man 7 signal 可知:
-1:重新读取一次参数的配置文件(类似reload)
-2:代表与由键盘输入【ctrl】-c 同样的操作;
-9:立刻强制删除一个工作;
-15:以正常的程序方式终止一项工作;
strace/truss,ltrace和gdb都是查看一个卡住的进程因何卡住的好工具。
另外,Solaris 里的 truss -u 非常好用,Solaris 里还有一些非常有用的 /proc 相关工具,有一些已经被移植到 Linux 上。
参考:
不要使用kill -9
没有给进程留下善后的机会:
1)关闭socket链接;
2)清理临时文件;
3)将自己快要给销毁的消息通知给子进程;
4)重置自己的终止状态。
通常,应该发送 15,等一两秒钟,如果没有效果,发送2,如果还不行,发送1。
总之,在使用 kill -9 前,你应该先使用 kill -15,给目标进程一个清理善后工作的机会(进程也许无法捕捉或直接忽略SIGKILL信号,但他们可以,通常也是能够捕捉 SIGTERM 信号的)。
如果你不留机会让进程完成清理工作,他们会留下一些不完整的文件或状态,当系统重启时,程序将无法理解这些状态。
kill 命令
-l (L的小写):列出目前 kill 能够使用的信号有哪些,信号代表给予后面接的那个工作什么样的指示,用 man 7 signal 可知:
-1:重新读取一次参数的配置文件(类似reload)
-2:代表与由键盘输入【ctrl】-c 同样的操作;
-9:立刻强制删除一个工作;
-15:以正常的程序方式终止一项工作;
strace/truss,ltrace和gdb都是查看一个卡住的进程因何卡住的好工具。
另外,Solaris 里的 truss -u 非常好用,Solaris 里还有一些非常有用的 /proc 相关工具,有一些已经被移植到 Linux 上。
参考:
不要使用kill -9
相关文章推荐
- 在ICCAVR中通过使用库函数来避免直接看到敏感算法源码
- 2015070207 - EffactiveJava笔记 - 第50条 尽量避免使用字符串(1)
- sql语句优化之一:尽量使用索引避免全表扫描
- 第50条:如果其他类型更合适,则尽量避免使用字符串
- 尽量使用const、enum、inline,避免使用#define
- struts1中应尽量避免使用全局变量!
- c++11 条款21:尽量使用std::make_unique和std::make_shared而不直接使用new
- mysql使用建议,尽量避免这些问题
- Hibernate 直接继承 避免使用super() 拥有父类的CRUD
- 为什么 C++ 中提倡尽量避免使用宏 #define(转)
- 2015070209 - EffactiveJava笔记 - 第50条 尽量避免使用字符串(3)
- 使用 CSS 时尽量避免使用的技术
- Oracle 尽量避免在 SQL语句的WHERE子句中使用函数
- 建议避免将Entity查询结果直接当IEnumerable使用
- 转帖 尽量使用const、enum、inline,避免使用#define
- 在ICCAVR中通过使用库函数来避免直接看到敏感算法源码
- 尽量避免在SQL语句中使用OR
- [转贴]部分C语言库函数。为了避免重复造车轮,请尽量使用标准库提供的函数
- 在FPGA开发中尽量避免全局复位的使用?
- OpenGL ES Shading Language中应尽量避免使用循环