Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm attempting to execute ps -ef | grep java through java program. Here is my code-

//  String sudoScript = "sh -c \"ps -ef | grep java\"";
    String sudoScript = "ps -ef | grep java";
    try {
        System.out.println("command=" + sudoScript);
        Process p1 = Runtime.getRuntime().exec(sudoScript);
        System.out.println("exit code: "+p1.waitFor());
        FileInputStream fis1 = (FileInputStream) p1.getErrorStream();
        int content1;
        while ((content1 = fis1.read()) != -1) {
            // convert to char and display it
            System.out.print((char) content1);
        }
        BufferedReader stdInput1 = new BufferedReader(
                new InputStreamReader(p1.getInputStream()));
        while ((sudoScript = stdInput1.readLine()) != null) {
            System.out.println(sudoScript);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

This is the output I got when I executed the command as ps -ef | grep java-

command=ps -ef | grep java
exit code: 1
ERROR: Garbage option.
********* simple selection *********  ********* selection by list *********
-A all processes                      -C by command name
-N negate selection                   -G by real group ID (supports names)
-a all w/ tty except session leaders  -U by real user ID (supports names)
-d all except session leaders         -g by session OR by effective group name
-e all processes                      -p by process ID
T  all processes on this terminal     -s processes in the sessions given
a  all w/ tty, including other users  -t by tty
g  OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)
r  only running processes             U  processes for specified users
x  processes w/o controlling ttys     t  by tty
*********** output format **********  *********** long options ***********
-o,o user-defined  -f full            --Group --User --pid --cols --ppid
-j,j job control   s  signal          --group --user --sid --rows --info
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
-F   extra full    X  registers       --heading --no-heading --context
                    ********* misc options *********
-V,V  show version      L  list format codes  f  ASCII art forest
-m,m,-L,-T,H  threads   S  children in sum    -y change -l format
-M,Z  security data     c  true command name  -c scheduling class
-w,w  wide output       n  numeric WCHAN,UID  -H process hierarchy

I tried using sh -c "ps -ef | grep java". But not luck. Got the following output-

command=sh -c "ps -ef | grep java"
exit code: 1
-ef: -c: line 0: unexpected EOF while looking for matching `"'
-ef: -c: line 1: syntax error: unexpected end of file

How can I overcome this?

share|improve this question

closed as off-topic by terdon, slhck Aug 22 '13 at 12:53

  • This question does not appear to be about computer software or computer hardware within the scope defined in the help center.
If this question can be reworded to fit the rules in the help center, please edit the question.

    
In case you haven't read through Help center yet – programming questions are considered off topic here. –  slhck Aug 22 '13 at 12:53
    
@slhck Ok. Won't happen again. Last time I asked a similar question in Stackoverflow, I was told to ask here though.. The question was this - superuser.com/questions/633611/… –  AlwaysALearner Aug 23 '13 at 3:34
    
This one is about programming - "how to make this work in java"; that one was about a command-line - "how to make sudo work without tty". It's a thin line when we're mixing programming and external commands. :) But still each site has its focus, hopefully you'll learn the difference soon. ^_^ –  msb Mar 13 at 21:51
add comment

1 Answer

up vote 0 down vote accepted

Found it! Worked for me.

try {
    Process p1 = Runtime.getRuntime().exec(new String[] { "ps", "-ef" });
    InputStream input = p1.getInputStream();
    Process p2 = Runtime.getRuntime().exec(new String[] { "grep", "java"});
    OutputStream output = p2.getOutputStream();
    IOUtils.copy(input, output);
    output.close(); // signals grep to finish
    List<String> result = IOUtils.readLines(p2.getInputStream());
    System.out.println(result);
} catch (Exception e) {
    e.printStackTrace();
}
share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.