我想生成正在运行的应用程序的线程转储。但是,当我杀死 -3 PID 时,它会在正在运行的应用程序的控制台上生成线程转储。
我想将它生成到一个文件中。我知道我可以将应用程序作为 ./run.sh > thread_dump 运行,或者我也可以使用 jstack 实用程序将其重定向到文件。
但是,我不想使用其中任何一个。在另一种方法中,我通过以下方式将控制台的完整输出重定向到文件:
File file = new File("out.txt");
FileOutputStream fos = new FileOutputStream(file);
PrintStream ps = new PrintStream(fos);
System.setOut(ps);
现在每个输出都写在 out.txt 中。但是,当我确实 kill -3 时,它会将线程转储写入控制台。
我在第三种方法中缺少什么?有人会知道,在 JVM 上调用 kill -3 时会调用什么类/源,以便我可以查看在发出 kill -3 请求/命令时如何准确编写线程转储?