package com.alipay.bluewhale.core.daemon.supervisor; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.apache.log4j.Logger; public class findByJavaPort { private static Logger LOG = Logger.getLogger(findByJavaPort.class); public static void main(String[] args) { String s="tcp 0 0 0.0.0.0:51117 0.0.0.0:* LISTEN 1267/java "; System.out.println(findByJavaPort.fetch(s, 51118)); } public static String[] getEnv(){ HashMap<String,String> map=new HashMap<String, String>(); Map<String, String> sysenv=System.getenv(); if(sysenv!=null) { for(Entry<String, String> e:System.getenv().entrySet()) { String ekey=e.getKey(); String evalue=e.getValue(); if(ekey.length()>1&&evalue.length()>1) { map.put(ekey, evalue); } } } String[] env = new String[map.size()]; int index=0; for(Entry<String, String> e:map.entrySet()) { env[index]=e.getKey()+"="+e.getValue(); index++; } return env; } public static ArrayList<String> findProcess(int port) { String[] execmd = { "/bin/sh", "-c" ,"netstat -npl"}; String[] env = getEnv(); Process process = null; try { process = Runtime.getRuntime().exec(execmd, env); } catch (Throwable e) { LOG.error("armory Runtime:", e); } ArrayList<String> list=new ArrayList<String>(); try { if (process != null) { GetBytesThreadError thr2 = new GetBytesThreadError(process.getErrorStream(), list,port); GetBytesThread thr = new GetBytesThread(process.getInputStream(), list,port ); thr2.start(); thr.start(); process.waitFor(); thr2.join(); thr.join(); int exitValue = process.exitValue(); } } catch (Throwable e) { LOG.error("armory Runtime:", e); } return list; } private static class GetBytesThreadError extends Thread { BufferedReader reader = null; GetBytesThreadError(InputStream input, ArrayList<String> ramoryInfo,int port) { this.reader = new BufferedReader(new InputStreamReader(input)); } public void run() { String s = null; try { Integer index=0; while ((s = reader.readLine()) != null&&index<100000) { index++; } this.reader.close(); } catch (Throwable e) { LOG.error("armory readLine:",e); } } } private static String fetch(String s,int port) { String matchport=":"+String.valueOf(port); if(s.indexOf("java")<0||s.indexOf(matchport)<0) { return null; } String[] cols=s.split("[ ]+",-1); if(cols.length<7) { return null; } if(cols[3].indexOf(matchport)<0||cols[6].indexOf("java")<0) { return null; } String[] pidpart=cols[6].split("/"); if(pidpart.length!=2) { return null; } String pid=pidpart[0]; try{ int ipid=Integer.parseInt(pid); return pid; }catch(Throwable e) { return null; } } private static class GetBytesThread extends Thread { BufferedReader reader = null; ArrayList<String> list; int port; GetBytesThread(InputStream input, ArrayList<String> ramoryInfo,int port) { this.port=port; this.list=ramoryInfo; this.reader = new BufferedReader(new InputStreamReader(input)); } public void run() { String s = null; try { Integer index=0; while ((s = reader.readLine()) != null&&index<100000) { index++; String pid=fetch(s,port); if(pid!=null) { list.add(pid); } } this.reader.close(); } catch (Throwable e) { LOG.error("armory readLine:",e); } } } }