8

我只是好奇。kill 的手册页说 QUIT,也就是信号 #3,是一个“核心”信号。对于 Java 进程,它似乎所做的只是转储线程信息。那么,QUIT 是用词不当吗?仅仅是JVM实现了一个转储线程的singal 3处理程序吗?

4

2 回答 2

9

QUIT可以说是 Java 的误称。但是根据这个论点,如果允许应用程序更改信号处理程序的默认行为,则任何信号名称都可能是用词不当。

实际上,UNIX 信号名称和它们实际所做的对应关系一直有点模糊和脆弱。然而,30 多年来,开发人员一直在处理这个“问题”,而这并不是一个真正的问题。

是的,Java 线程堆栈转储行为是由 JVM 实现的。默认的 UNIX / LINUX 行为是创建进程的内存转储,除非这被其他因素禁止。

于 2012-08-14T21:33:23.273 回答
6

是的,JVM 捕获#3 信号来转储线程。默认情况下,对于普通的 unix 进程,它会转储内核(即获取进程的内存快照并将其写入文件)并退出。

对于 Java,这不是很有帮助,因此它会改为执行线程转储。

于 2012-08-14T21:17:36.183 回答