Bem resumido a conversar este trecho de código varre os processo do sistema pegando apenas os processo do java os servidor web glassfish, tomcat e entre outro visando futuramente o monitoramento do mesmo, lembrando que este codigo vai reclama o jar tool que se encontra no propio java instalado XD no seu sistema basta apenas importa-lo.
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import sun.jvmstat.monitor.*;
import sun.tools.jps.Arguments;
/**
*
* @author Luiz Henrque Buris
*/
public class RuntimeScan {
private static Arguments arguments;
public String t = null;
List<String> l = new ArrayList<String>();
public void scam(String[] args) {
try {
arguments = new Arguments(args);
} catch (IllegalArgumentException e) {
System.err.println(e.getMessage());
Arguments.printUsage(System.err);
return;
}
if (arguments.isHelp()) {
Arguments.printUsage(System.out);
System.exit(0);
}
try {
HostIdentifier hostId = arguments.hostId();
MonitoredHost monitoredHost = MonitoredHost.getMonitoredHost(hostId);
// Obtém o conjunto de JVMs ativos no host especificado.
Set jvms = monitoredHost.activeVms();
for (Iterator j = jvms.iterator(); j.hasNext(); /* empty */) {
StringBuilder output = new StringBuilder();
Throwable lastError = null;
int lvmid = ((Integer) j.next()).intValue();
output.append(String.valueOf(lvmid));
if (arguments.isQuiet()) {
System.out.println("aaa" + output);
continue;
}
MonitoredVm vm = null;
String vmidString = "//" + lvmid + "?mode=r";
try {
VmIdentifier id = new VmIdentifier(vmidString);
vm = monitoredHost.getMonitoredVm(id, 0);
} catch (URISyntaxException e) {
// unexpected as vmidString is based on a validated hostid
lastError = e;
assert false;
} catch (Exception e) {
lastError = e;
} finally {
if (vm == null) {
output.append(" -- process information unavailable");
if (arguments.isDebug()) {
if ((lastError != null)
&& (lastError.getMessage() != null)) {
output.append("\n\t");
output.append(lastError.getMessage());
}
}
System.out.println(output);
if (arguments.printStackTrace()) {
lastError.printStackTrace();
}
continue;
}
}
output.append(" ");
output.append(MonitoredVmUtil.mainClass(vm,
arguments.showLongPaths()));
if (arguments.showMainArgs()) {
String mainArgs = MonitoredVmUtil.mainArgs(vm);
if (mainArgs != null && mainArgs.length() > 0) {
output.append(" ").append(mainArgs);
}
}
if (arguments.showVmArgs()) {
String jvmArgs = MonitoredVmUtil.jvmArgs(vm);
if (jvmArgs != null && jvmArgs.length() > 0) {
output.append(" ").append(jvmArgs);
}
}
if (arguments.showVmFlags()) {
String jvmFlags = MonitoredVmUtil.jvmFlags(vm);
if (jvmFlags != null && jvmFlags.length() > 0) {
output.append(" ").append(jvmFlags);
}
}
monitoredHost.detach(vm);
t = output.toString();
l.add(t);
}
} catch (MonitorException e) {
if (e.getMessage() != null) {
System.err.println(e.getMessage());
} else {
Throwable cause = e.getCause();
if ((cause != null) && (cause.getMessage() != null)) {
System.err.println(cause.getMessage());
} else {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
RuntimeScan d = new RuntimeScan();
d.scam(args);
Este trecho estou usando expressão regular para saber quais processos contem letra ou apenas numero
Pattern pattern = Pattern.compile("\\d{4,4} [a-zA-Z]{4,20}");
for (int i = 0; i < d.l.size(); i++) {
Matcher matcher = pattern.matcher(d.l.get(i));
if (matcher.find()) {
System.out.println("Encontrou");
System.out.println(d.l.get(i));
} else {
System.out.println("Não encontrou");
}
}
}
}