代码之家  ›  专栏  ›  技术社区  ›  Alex

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

  •  4
  • Alex  · 技术社区  · 17 年前

    kill 命令他们有没有理由不这样关闭进程?这是否确保动态分配的内存将正确返回?还有其他负面影响吗?我直觉地认为这是终止一个过程的最后手段。

    6 回复  |  直到 12 年前
        1
  •  19
  •   Zan Lynx    17 年前

    这个 kill

    当进程因任何原因退出时,Unix操作系统 清理其内存分配、文件句柄和其他资源。唯一没有清理的资源是那些应该共享的资源,比如文件和共享内存的内容(比如SystemV IPC)。

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

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

    现在SIGKILL信号是9号,

        2
  •  10
  •   Tom Ritter    17 年前

    杀死

    杀死-9

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

        3
  •  5
  •   Vineet    17 年前

    每个进程在其自己的受保护地址空间中运行,当进程结束时(无论是自动退出还是被外部信号终止),该地址空间将被完全回收。是的,只要它的内存被正确释放。

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

        4
  •  2
  •   Frank Krueger    17 年前
    kill -9
    

    是万不得已的办法,不是吗 kill

    1. 是内存被回收(这是操作系统的责任)
    2. 程序可以根据自己的意愿对信号做出响应,这取决于特定程序是否“做正确的事情”
        5
  •  2
  •   frankodwyer    17 年前

    默认情况下,kill将发送终止信号,该信号将允许进程正常退出。如果进程似乎没有及时退出,那么一些脚本将返回kill-9,这将强制退出“准备就绪或未就绪”。

    在所有情况下,操作系统管理的东西,如动态内存将被返回,文件关闭等,但应用程序级的东西可能不会在一个-9杀死整理。

        6
  •  0
  •   Bill Karwin    17 年前

    kill

    在任何情况下,一旦进程退出,操作系统将回收动态分配的内存、关闭打开的文件描述符和其他资源。

    可能有一些资源仍然存在,例如,如果应用程序拥有共享内存或套接字,而这些共享内存或套接字也由其他(仍然存在的)进程持有。