在jdk/src/share/bin/main.c文件中,有个main方法,它是一切的源头,JVM就是从这里开始它的人生之旅的,经过一路小跑,会创建main线程,也会创建JVM....比如像jstack命令,阿里的Arthas(阿尔萨斯)等工具,它们底层都是通过这个socket文件描述符连接到目标JVM,从而实现通信....那么它是如何做到的呢?
首先,在代码中定义了一个 const char *filename = "/tmp/.java_pid6617"; 文件名, 我们看下这个文件.
6617就是进程ID....在我们的C语言代码里
// 创建Unix Domain Socket用于本机进程间通信
fd = socket(PF_UNIX, SOCK_STREAM, 0);
// 连接服务器....并与服务端(也就是目标JVM)建立了连接, 然后就是发送命令了.