1 21 22 package org.armedbear.j; 23 24 import java.io.BufferedReader ; 25 import java.io.InputStreamReader ; 26 import java.util.ArrayList ; 27 import java.util.List ; 28 import java.util.StringTokenizer ; 29 30 public final class ProcessTable 31 { 32 private ArrayList entries = new ArrayList (); 33 34 private ProcessTable() 35 { 36 } 37 38 public static ProcessTable getProcessTable() 39 { 40 if (!Platform.isPlatformUnix()) 41 return null; 42 ProcessTable table = new ProcessTable(); 43 try { 44 String [] cmdarray = {"/bin/sh", "-c", "ps -o pid,ppid,command"}; 45 Process process = Runtime.getRuntime().exec(cmdarray); 46 BufferedReader reader = 47 new BufferedReader (new InputStreamReader (process.getInputStream())); 48 if (reader != null) { 49 String s; 50 while ((s = reader.readLine()) != null) { 51 if (s.length() > 0) 52 table.addEntry(s); 53 } 54 } 55 } 56 catch (Throwable t) { 57 Log.error(t); 58 } 59 return table; 60 } 61 62 public List findMatchingEntries(String command) 63 { 64 ArrayList results = new ArrayList (); 65 if (command != null && command.length() > 0){ 66 String alternate = "-".concat(command.substring(1)); 69 for (int i = 0; i < entries.size(); i++) { 70 ProcessTableEntry entry = (ProcessTableEntry) entries.get(i); 71 if (entry.command.indexOf(command) >= 0 || 72 entry.command.indexOf(alternate) >= 0) 73 results.add(entry); 74 } 75 } 76 return results; 77 } 78 79 public List findChildren(int pid) 80 { 81 ArrayList results = new ArrayList (); 82 for (int i = 0; i < entries.size(); i++) { 83 ProcessTableEntry entry = (ProcessTableEntry) entries.get(i); 84 if (entry.ppid == pid) 85 results.add(entry); 86 } 87 return results; 88 } 89 90 private void addEntry(String s) 91 { 92 StringTokenizer st = new StringTokenizer (s); 93 if (st.countTokens() >= 3) { 94 String pidString = st.nextToken(); 95 String ppidString = st.nextToken(); 96 String command = st.nextToken("\n").trim(); 97 int pid, ppid; 98 try { 99 pid = Integer.parseInt(pidString); 100 ppid = Integer.parseInt(ppidString); 101 entries.add(new ProcessTableEntry(pid, ppid, command)); 102 } 103 catch (NumberFormatException e) {} 104 } 105 } 106 } 107 | Popular Tags |