当前位置:  开发笔记 > 编程语言 > 正文

Unix kill命令是否确保动态分配的内存将正确返回?

如何解决《Unixkill命令是否确保动态分配的内存将正确返回?》经验,为你挑选了3个好方法。

我在新分配的项目中发现了一堆脚本,即"关闭"脚本.他们只是做一些基本搜索并运行Unix kill命令.他们有什么理由不应该这样关闭这个过程吗?这是否确保动态分配的内存将正确返回?还有其他负面影响吗?我在直觉下操作,这是终止进程的最后手段.



1> Zan Lynx..:

kill命令向Unix进程发送信号.该信号默认为SIGTERM,这是程序退出的礼貌请求.

当进程因任何原因退出时,Unix OS 清理其内存分配,文件句柄和其他资源.唯一没有被清理的资源是那些应该被共享的资源,比如文件和共享内存的内容(如System V IPC).

许多程序在退出时不需要进行任何特殊清理,并使用默认的SIGTERM行为,即让操作系统停止进程.

如果程序确实需要特殊行为,它可以安装信号处理程序,然后它可以运行一个函数来处理信号.

现在,SIGKILL信号(数字9)邪恶的,但也是必要的.这个信号永远不会进入过程本身,操作系统简单地停止了该过程.这应该只在真正,非常必要的时候使用.在多线程程序中经常需要进入死锁或安装了TERM信号处理程序的程序,但在退出过程中搞砸了.



2> Tom Ritter..:

kill是对该计划结束的礼貌要求.它清理它的内存,关闭它的句柄和其他这样的好处.它发送一个SIGTERM

kill -9告诉操作系统通过球抓住进程然后把它扔出吧.显而易见,它并不关心好处 - 尽管它确实回收了所有内存,因为操作系统负责跟踪它.但是因为它是一个强制关闭,你可能在尝试再次运行程序时遇到问题(例如,不清理.pid文件)

另见[维基百科](http://en.wikipedia.org/wiki/Kill_ ( Unix)



3> Vineet..:

每个进程都在自己的受保护地址空间中运行,当进程结束时(无论是自愿退出还是被外部信号杀死),地址空间都被完全回收.所以是的,如果它的内存被正确释放的话.

根据过程的不同,下次尝试运行时可能会或可能不会导致其他问题.例如,它可能会打开一些文件,如果它意外被杀,则会使它们处于不一致状态.(文件将自动关闭,但它可能正在编写某些应用程序数据,例如,如果被中断,文件可能包含不完整/不一致的数据.)

通常,当系统关闭时,所有进程都将发送信号15(SIGTERM),在该信号下,它们可以执行他们需要执行的任何清理/关闭操作.然后不久之后,他们会得到信号9(SIGKILL),这会立即杀死他们,而不给他们任何机会做出任何反应.这使得所有进程都有机会自行清理,然后强制杀死任何没有及时响应的进程.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有