зеркало из
				https://github.com/iharh/notes.git
				synced 2025-11-03 23:26:09 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			32 строки
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			32 строки
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
From a Java program, I needed to test if another Java program was running. My first thought was that the jps tool already
 | 
						|
provides me with this information. But I was being curious how he does that. So I had a look at its bytecode, and created
 | 
						|
a very simplified version of the jps tool.
 | 
						|
 | 
						|
package jps;
 | 
						|
 | 
						|
import java.net.URISyntaxException;
 | 
						|
import java.util.Set;
 | 
						|
 | 
						|
import sun.jvmstat.monitor.*;
 | 
						|
 | 
						|
public class MyJps
 | 
						|
{
 | 
						|
 | 
						|
   public static void main(String[] args) throws MonitorException, URISyntaxException
 | 
						|
   {
 | 
						|
      MonitoredHost monitoredHost = MonitoredHost.getMonitoredHost("localhost");
 | 
						|
      Set<Integer> activeVms = monitoredHost.activeVms();
 | 
						|
      for (int psId : activeVms)
 | 
						|
      {
 | 
						|
         MonitoredVm monitoredVm = monitoredHost.getMonitoredVm(new VmIdentifier(String.valueOf(psId)));
 | 
						|
         String mainClass = MonitoredVmUtil.mainClass(monitoredVm, false);
 | 
						|
         System.out.println(mainClass + " [" + psId + "]");
 | 
						|
      }
 | 
						|
   }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
It uses classes from the tools.jar, so do not forget to include it in your classpath if you run this class. From there, it is
 | 
						|
not difficult to write a small method that test if a given Java process is running. Also, it is not difficult to change this
 | 
						|
code to make it work on a distant server.
 |