Почему DefaultExecutor создает 2 потока для вызова команды "php file.php" - PullRequest
1 голос
/ 28 июля 2011

Я использую DefaultExecutor из apache-commons-exec для выполнения php, но когда я вижу профиль, я вижу, что в последней строке функция execute создает 2 параллельных потока для синхронного вызова процесса. Почему?

CommandLine command = new CommandLine("php");
command.addArgument("file.php");

DefaultExecutor exec = new DefaultExecutor();

PumpStreamHandler streamHandler = new PumpStreamHandler(null, null);
exec.setStreamHandler(streamHandler);

int execute = exec.execute(command);

Проблема в том, что я вызываю N потоков с помощью цикла, вызывающего exec.execute (command); , поэтому, если я использую 3 потока, каждый раз при вызове execute APP создает 6 новых потоки, которые умирают, когда exec.execute (команда); заканчивается.

http://i.imgur.com/ap5mo.jpg

1 Ответ

1 голос
/ 28 июля 2011

Я не знаком с рассматриваемой библиотекой, но, как правило, в Java, когда вы выполняете отдельный процесс, вам нужны дополнительные потоки для правильной обработки стандартного вывода / ошибки (в противном случае процесс может блокироваться). я бы предположил, что это дополнительные потоки, которые вы видите (подробности об обработке процесса, за исключением здесь ).

...