Erro do Runtime.exec (): trava sem fornecer um objeto Process

Se eu uso isso:

process = Runtime.getRuntime().exec("logcat -d time");

ou aquilo

process = new ProcessBuilder()
              .command("logcat", "-d", "time")
              .redirectErrorStream(true)
              .start();

Eu obtenho os mesmos resultados: geralmente trava na chamada exec () ou start (), não importa o que eu tentei fazer! O encadeamento executando isso nem pode ser interrompido com Thread.interrupt ()! O processo filho é definitivamente iniciado e, se eliminado, os comandos acima retorna

Essas chamadas podem falhar na primeira tentativa, portanto, NÃO HÁ MANEIRA DE LER SUA SAÍDA! Também posso usar uma linha de comando "su -c kill xxx" simples, mesmo resultado!

EDIT: Começou a depurar o arquivo java_lang_ProcessManager.cpp em um projeto NDK com alguns logs de depuração! Então, aqui está o que eu encontrei até agora, após o fork (), o pai faz o seguinte:

int result;
int count = read(statusIn, &result, sizeof(int));            <- hangs there
close(statusIn);

Embora o processo filho não deva bloqueá-lo: é isso que a criança faz se tudo começou!):

    // Make statusOut automatically close if execvp() succeeds.
    fcntl(statusOut, F_SETFD, FD_CLOEXEC);                      <- make the parent will not block

    // Close remaining unwanted open fds.
    closeNonStandardFds(statusOut, androidSystemPropertiesFd);  <- hangs here sometimes

    ...

    execvp(commands[0], commands);

    // If we got here, execvp() failed or the working dir was invalid.
    execFailed:
        int error = errno;
        write(statusOut, &error, sizeof(int));
        close(statusOut);
        exit(error);

A criança pode falhar por 2 motivos reproduzíveis: 1 - o código filho não está sendo executado, mas os pais acreditam que sim! 2- blocos filhos em closeNonStandardFds (statusOut, androidSystemPropertiesFd);

Nos dois casos, a leitura (statusIn ...) no pai termina em impasse! e um processo filho é deixado morto (e não pode ser acessado, pid desconhecido, nenhum objeto Process)!

questionAnswers(4)

yourAnswerToTheQuestion