如何向正在运行的Linux进程发送Ctrl-Break信号?

12

我正在调试一个运行在Sun的JDK 1.4.2_18上的应用程序中的内存泄漏问题。看起来这个版本支持命令行参数-XX:+HeapDumpOnCtrlBreak,据说当JVM遇到control-break时会导出堆。如何将此命令发送到Linux框上的后台进程?看来 kill 信号是这种方式应该工作的方式,但我使用kill -l没有找到任何明显的Ctrl-Break选项,至少在我的Ubuntu框上没有。

更新:我测试了Kill -3和Sun JDK 1.4.2_18(第14版是第一次以这种方式转储堆),它可以工作。导出了一个堆转储文件,并且该进程仍在运行。

2个回答

18

Ctrl-\ 是 UNIX/Linux 中与 Windows Ctrl-Break 等效的键盘快捷键。同时,维基百科 还告诉我,在 Linux 虚拟控制台上,您也可以使用 Ctrl-4 或 SysRq 键(我猜您需要一些奇怪的东西来让普通终端模拟器通过 ssh/telnet 传递这些按键的表示)。


1
通常终端会绑定到C-\以发送SIGQUIT信号。这可以通过stty quit进行配置,但我不确定它是否是所有系统的默认设置。 - ephemient
@ephemient,虽然不是所有终端都这样,但即使是异域的终端也倾向于使用这种方式。例如,我的IBM 3161就是这样的。http://i.imgur.com/6DejIxY.jpg - Wyatt Ward
1
已经有一个类似的主题被打开并且对我很有帮助,例如“Ctrl+Z”。 - NCC1701
根据https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html,SIGQUIT会产生核心转储,因此我认为Ctrl-Break更像是SIGTERM,即在Linux中的`kill -TERM`。 - paulie4

10

使用kill -QUIT命令可能会达到目的(它将生成一个线程转储,该线程转储可通过在Windows上使用ctrl-break来生成。但我尚未尝试使用堆转储选项)。


我没有安装支持-XX:+HeapDumpOnCtrlBreak选项的JVM的Linux系统,因此无法测试它(而且我从未尝试过,也不能保证它能正常工作)。 - bm212
我更愿意看到建议使用“kill -QUIT”而不是“kill -3”,尽管它们是等效的。 - ephemient
根据 https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html 的说明,SIGQUIT 会生成一个核心转储文件,因此我认为 Ctrl-Break 更像是 SIGTERM,即在 Linux 中的 kill -TERM - paulie4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接