| /******************************************************************************* |
| * Copyright (c) 2005, 2010 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.cdt.internal.core.macosx; |
| |
| 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 = {"/bin/ps", "-a", "-c", "-x", "-o", "pid,command"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ |
| |
| 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 |
| |
| lastline = lastline.trim(); |
| 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) { |
| } |
| } |
| } |
| psOutput.close(); |
| } catch(Exception e) { |
| /* Ignore */ |
| } |
| |
| ps.destroy(); |
| return (IProcessInfo [])procInfo.toArray(new IProcessInfo[procInfo.size()]); |
| } |
| |
| } |