diff options
author | Alain Magloire | 2002-10-15 17:58:15 +0000 |
---|---|---|
committer | Alain Magloire | 2002-10-15 17:58:15 +0000 |
commit | 0440f4618e188fad46645e99e1a48afea0f05593 (patch) | |
tree | 502563df7984999e29f4a9c4b27662be0f850d39 /core/org.eclipse.cdt.core.solaris/src/org/eclipse/cdt/internal/core/solaris | |
parent | d049b3c0ae6f99bde116650ea765e480ae15bdec (diff) | |
download | org.eclipse.cdt-0440f4618e188fad46645e99e1a48afea0f05593.tar.gz org.eclipse.cdt-0440f4618e188fad46645e99e1a48afea0f05593.tar.xz org.eclipse.cdt-0440f4618e188fad46645e99e1a48afea0f05593.zip |
implement for solaris ProcessList, this is use to get
a list of pid to attach in the debugger.
Diffstat (limited to 'core/org.eclipse.cdt.core.solaris/src/org/eclipse/cdt/internal/core/solaris')
2 files changed, 112 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core.solaris/src/org/eclipse/cdt/internal/core/solaris/ProcessInfo.java b/core/org.eclipse.cdt.core.solaris/src/org/eclipse/cdt/internal/core/solaris/ProcessInfo.java new file mode 100644 index 00000000000..7455dbbbfb4 --- /dev/null +++ b/core/org.eclipse.cdt.core.solaris/src/org/eclipse/cdt/internal/core/solaris/ProcessInfo.java @@ -0,0 +1,45 @@ +package org.eclipse.cdt.internal.core.solaris; + +import org.eclipse.cdt.core.IProcessInfo; + +/** + * @author alain + * + * To change this generated comment edit the template variable "typecomment": + * Window>Preferences>Java>Templates. + * To enable and disable the creation of type comments go to + * Window>Preferences>Java>Code Generation. + */ +public class ProcessInfo implements IProcessInfo { + + int pid; + String name; + + public ProcessInfo(String pidString, String name) { + try { + pid = Integer.parseInt(pidString); + } catch (NumberFormatException e) { + } + this.name = name; + } + + public ProcessInfo(int pid, String name) { + this.pid = pid; + this.name = name; + } + + /** + * @see org.eclipse.cdt.core.IProcessInfo#getName() + */ + public String getName() { + return name; + } + + /** + * @see org.eclipse.cdt.core.IProcessInfo#getPid() + */ + public int getPid() { + return pid; + } + +} diff --git a/core/org.eclipse.cdt.core.solaris/src/org/eclipse/cdt/internal/core/solaris/ProcessList.java b/core/org.eclipse.cdt.core.solaris/src/org/eclipse/cdt/internal/core/solaris/ProcessList.java new file mode 100644 index 00000000000..6ad8c40c11e --- /dev/null +++ b/core/org.eclipse.cdt.core.solaris/src/org/eclipse/cdt/internal/core/solaris/ProcessList.java @@ -0,0 +1,67 @@ +package org.eclipse.cdt.internal.core.solaris; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayList; + +import org.eclipse.cdt.core.IProcessInfo; +import org.eclipse.cdt.core.IProcessList; +import org.eclipse.cdt.utils.spawner.ProcessFactory; + +/** + * Insert the type's description here. + * @see IProcessList + */ +public class ProcessList implements IProcessList { + + ProcessInfo[] empty = new ProcessInfo[0]; + + public ProcessList() { + } + + /** + * Insert the method's description here. + * @see IProcessList#getProcessList + */ + public IProcessInfo [] getProcessList() { + Process ps; + BufferedReader psOutput; + String[] args = {"/usr/bin/ps", "-e", "-o", "pid,args"}; + + try { + ps = ProcessFactory.getFactory().exec(args); + psOutput = new BufferedReader(new InputStreamReader(ps.getInputStream())); + } catch(Exception e) { + return new IProcessInfo[0]; + } + + //Read the output and parse it into an array list + ArrayList procInfo = new ArrayList(); + + try { + String lastline; + while ((lastline = psOutput.readLine()) != null) { + //The format of the output should be + //PID space name + + int index = lastline.indexOf(' '); + if (index != -1) { + String pidString = lastline.substring(0, index).trim(); + try { + int pid = Integer.parseInt(pidString); + String arg = lastline.substring(index + 1); + procInfo.add(new ProcessInfo(pid, arg)); + } catch (NumberFormatException e) { + } + } + } + + } catch(Exception e) { + /* Ignore */ + } + + ps.destroy(); + return (IProcessInfo [])procInfo.toArray(new IProcessInfo[procInfo.size()]); + } + +} |