【问题标题】:How can one send a Ctrl-Break to a running Linux process?如何向正在运行的 Linux 进程发送 Ctrl-Break?
【发布时间】:2009-05-11 21:26:51
【问题描述】:

我正在调试在 Sun 的 JDK 1.4.2_18 上运行的应用程序中的内存泄漏。这个版本似乎支持命令行参数 -XX:+HeapDumpOnCtrlBreak,这可能会导致 JVM 在遇到控制中断时转储堆。如何将其发送到 Linux 机器上的后台进程?看来 kill 信号应该是这样工作的,但我 kill -l 没有报告任何明显是 Ctrl-Break 的东西,至少在我的 Ubuntu 机器上是这样。

更新:我用 Sun JDK 1.4.2_18 测试了 Kill -3(_14 是第一个以这种方式转储堆的),它工作正常。堆转储文件已创建,进程仍在运行。

【问题讨论】:

    标签: java linux kill jvm-arguments


    【解决方案1】:

    Ctrl-\ 是 Windows Ctrl-Break 的 UNIX/Linux 等效项。 Wikipedia 还告诉我,您还可以在 Linux 虚拟控制台上使用 Ctrl-4 或 SysRq(我想您需要一些奇怪的东西才能让普通终端仿真器传递这些按键的表示(通过 ssh/telnet))。

    【讨论】:

    • 是的,通常终端绑定C-\发送SIGQUIT。这可以使用stty quit 进行配置,我不确定它是否是所有系统的默认设置。
    • @ephemient 并非总是如此,但即使是异国情调的终端也倾向于使用它。例如,我的 IBM 3161 就可以。 i.imgur.com/6DejIxY.jpg
    • 一个similar topic 已经打开,它对我帮助很大,例如“Ctrl+Z”。
    • 根据gnu.org/software/libc/manual/html_node/Termination-Signals.html,SIGQUIT会产生核心转储,所以我认为Ctrl-Break更像是一个SIGTERM,即Linux中的kill -TERM
    【解决方案2】:

    kill -QUIT 可能会执行此操作(它会生成一个线程转储,该线程转储由 Windows 上的 ctrl-break 生成。不过我还没有尝试使用堆转储选项)。

    【讨论】:

    • 我没有带有支持 -XX:+HeapDumpOnCtrlBreak 选项的 jvm 的 linux 机器,所以无法测试(而且我从未真正做过,所以不能保证它作品)。
    • 我更愿意看到“kill -QUIT”的建议而不是“kill -3”,即使它们是等价的。
    • 根据gnu.org/software/libc/manual/html_node/Termination-Signals.html,SIGQUIT会产生核心转储,所以我认为Ctrl-Break更像是一个SIGTERM,即Linux中的kill -TERM
    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多