Как прочитать stderr программы, если она завершает работу с кодом 134JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как прочитать stderr программы, если она завершает работу с кодом 134

Сообщение Anonymous »

У меня есть программа на C (с ошибками), которая завершается с кодом завершения 134 (прерывание). Он ведет себя следующим образом:

Код: Выделить всё

#include 
#include 
#include 
#include 
int main() {
printf("Hello world\n");
fprintf(stderr, "Some error\n");
free((void*)1);
}
Если я выполню его в командной строке, я получу следующий результат:

Код: Выделить всё

./a.out
Hello world
Some error
a.out(8435,0x2004a8f40) malloc: *** error for object 0x1: pointer being freed was not allocated
a.out(8435,0x2004a8f40) malloc: *** set a breakpoint in malloc_error_break to debug
zsh: abort      ./a.out
Это работает так, как ожидалось. (Фактическая программа на C, конечно, более сложна).
Когда я пытаюсь выполнить ее из программы Java, я получаю выходные данные «Hello world» и «Некоторая ошибка», но не остальные строки содержат «malloc». Вот моя Java-программа:

Код: Выделить всё

import java.io.*;
public class Test {
public static void main(String... args) throws Exception {
runProcess(new File("a.out").getAbsolutePath());
}

public static void runProcess(String... command) throws Exception {
Process process = new ProcessBuilder(command).start();
Thread outThread = new Thread(() -> {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
});
outThread.start();
Thread outThread2 = new Thread(() -> {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
});
outThread2.start();
outThread.join();
outThread2.join();
int exitCode = process.waitFor();
System.out.println("Exit code: " + exitCode);
}
}
Я получаю:

Код: Выделить всё

java Test
Some error
Hello world
Exit code: 134
Как получить строки «malloc»? Возможно ли вообще, имеется в виду: оболочка каким-то образом генерирует эти строки? Если оболочка генерирует эти строки, можно ли сделать это и в Java? (Я не против того, чтобы «Некоторая ошибка» печаталась перед «Hello world».)

Подробнее здесь: https://stackoverflow.com/questions/792 ... h-code-134
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»