让JVM不退出,我们对它做点手脚,看一下JVM中的两个线程....我们再看一下这个进程6617打开的文件描述符,如下
ls -l /proc/6617/fd
共计6个文件描述符, 0,1,2分别是标准输入,标准输出和标准错误输出. 3,4,5描述符表示打开的3个jar...比如上文中,我们使用kill向指定的进程6617发送的3号退出信号,就是由进程6617中的Signal Dispatcher线程来处理的....那么它是如何做到的呢?
首先,在代码中定义了一个 const char *filename = "/tmp/.java_pid6617"; 文件名, 我们看下这个文件.
6617就是进程ID....代码中我们发送了一个threaddump的命令,如下
char *cmd = "1\0threaddump\0\0\0\0"; // 长度16
一切皆协议, 客户端和服务端约定好了