package info.xiancloud.core.util; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Map; /** * Java process helper class for us to get the PID, HOSTNAME, main class etc. * * @author happyyangyuan */ public class JavaPIDUtil { private static Integer PID; private static String PROCESS_NAME; public static int getPID() { if (PID == null) { initPID(); } return PID; } public static String getProcessName() { if (StringUtil.isEmpty(PROCESS_NAME)) { initPID(); } return PROCESS_NAME; } private static String hostname; public static String getHostname() { if (StringUtil.isEmpty(hostname)) { initPID(); } return hostname; } private static void initPID() { RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); String name = runtime.getName(); System.out.println("Java process name: " + name); PROCESS_NAME = name; int index = name.indexOf("@"); if (index != -1) { PID = Integer.parseInt(name.substring(0, index)); System.out.println("Java process id: " + PID); hostname = name.substring(index + 1); System.out.println("hostname: " + hostname); } else { throw new RuntimeException("Failed to obtain the java process id."); } } private static String mainClass; public static String getMainClass() { if (StringUtil.isEmpty(mainClass)) { //for oracle jdk/jre String oracleJava = System.getProperty("sun.java.command"); // like "org.x.y.Main arg1 arg2" if (!StringUtil.isEmpty(oracleJava)) { mainClass = oracleJava; } else {//just in case. for (final Map.Entry<String, String> entry : System.getenv().entrySet()) { if (entry.getKey().startsWith("JAVA_MAIN_CLASS")) // like JAVA_MAIN_CLASS_13328 mainClass = entry.getValue(); } if (StringUtil.isEmpty(mainClass)) { throw new IllegalStateException("Cannot determine main class."); } } System.out.println("main方法 = " + mainClass); } return mainClass; } public static void main(String... args) throws UnknownHostException { JavaPIDUtil.getPID(); System.out.println(InetAddress.getLocalHost().getHostName()); System.out.println(System.getProperties()); System.out.println(System.getenv()); System.out.println(getMainClass()); } }