0

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?

3
  • 1
    In case you haven't read through Help center yet – programming questions are considered off topic here.
    – slhck
    Aug 22, 2013 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/… Aug 23, 2013 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, 2014 at 21:51

1 Answer 1

1

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();
}

Not the answer you're looking for? Browse other questions tagged .