"ps -ef | grep java" using java program

37,323

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:
37,323
AlwaysALearner
Author by

AlwaysALearner

Updated on September 18, 2022

Comments

  • AlwaysALearner
    AlwaysALearner over 1 year

    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?

    • slhck
      slhck over 10 years
      In case you haven't read through Help center yet – programming questions are considered off topic here.
    • AlwaysALearner
      AlwaysALearner over 10 years
      @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/…
    • msb
      msb about 10 years
      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. ^_^