2013-03-24 1 views
0

Я пишу код, который запускает командную строку с использованием исполнителя apache по умолчанию. Я нашел способ получить код выхода, но я не смог найти способ получить идентификатор процесса.Получение идентификатора процесса с помощью java apache default executor

мой код:

protected void runCommandLine(OutputStream stdOutStream, OutputStream stdErrStream, CommandLine commandLine) throws InnerException{ 
DefaultExecutor executor = new DefaultExecutor(); 
    PumpStreamHandler streamHandler = new PumpStreamHandler(stdOutStream, 
      stdErrStream); 
    executor.setStreamHandler(streamHandler); 
    Map<String, String> environment = createEnvironmentMap(); 
try { 
     returnValue = executor.execute(commandLine, environment); 
    } catch (ExecuteException e) { 
     // and so on... 
     } 
     returnValue = e.getExitValue(); 
     throw new InnerException("Execution problem: "+e.getMessage(),e); 
    } catch (IOException ioe) { 
     throw new InnerException("IO exception while running command line:" 
       + ioe.getMessage(),ioe); 
    } 
} 

Что я должен сделать для того, чтобы получить ProcessID?

+0

Взгляните на [это] (http://stackoverflow.com/questions/5174426/graceful-kill-of-apache-commons-exec-process). –

+0

Im работает с Windows ... – Rivi

ответ

2

Невозможно получить PID процесса, используя API apache-commons (или используя базовый Java API).

«Простейшая» вещь, вероятно, заключалась бы в том, чтобы ваша внешняя программа выполнялась таким образом, что сама программа возвращает свой ПИД-код каким-то образом в генерируемый им вывод. Таким образом вы можете захватить его в своем приложении java.

Это позор java не экспортирует PID. Это был запрос функции для over a decade.

+0

Например, это приведет к тому, что PID будет напечатана в первой строке: '/ bin/sh -c 'echo $$ && exec program args'' – Hamy