„Ps -ef | grep java ”przy użyciu programu java [zamknięte]

-2

Próbuję wykonać ps -ef | grep java przez program java. Oto mój kod -

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

To jest wyjście, które otrzymałem po wykonaniu polecenia jako 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

Próbowałem użyć sh -c "ps -ef | grep java". Ale nie szczęście. Mam następujące wyjście -

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

Jak mogę to pokonać?

AlwaysALearner
źródło
1
W przypadku, gdy nie przeczytałeś Centrum pomocy jeszcze - pytania programistyczne są uważane za temat tutaj.
slhck
@slhck Ok. Nie powtórzy się. Ostatnim razem, gdy zadałem podobne pytanie w Stackoverflow, powiedziano mi, żeby zapytać tutaj ... Pytanie brzmiało: superuser.com/questions/633611/…
AlwaysALearner
Ten dotyczy programowania - „jak zrobić tę pracę w Javie”; chodziło o linię poleceń - „jak zrobić sudo bez tty”. Jest to cienka linia podczas miksowania poleceń programowych i zewnętrznych. :) Ale nadal każda strona ma swój cel, mam nadzieję, że wkrótce poznasz różnicę. ^ _ ^
msb

Odpowiedzi:

0

Znalazłem to! Pracowałem dla mnie.

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();
}
AlwaysALearner
źródło