Процесс висит в waitFor () - PullRequest
       0

Процесс висит в waitFor ()

2 голосов
/ 12 сентября 2011

Я пытаюсь запустить mysql для запуска некоторых файлов из Java.Входные данные читаются из файла и должны быть переданы в процесс mysql, все выглядит нормально, но строка

int exitCode = proc.waitFor(); 

никогда не возвращается.

private boolean runScript(String path, String cmd, File file) throws IOException, InterruptedException {
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec( path + File.separatorChar + cmd );
        OutputStream procOS = proc.getOutputStream();
        InputStream procES = proc.getErrorStream();
        InputStream procIS = proc.getInputStream();
        OutputStreamWriter procStdIn = new OutputStreamWriter( procOS );

        FileInputStream fis = new FileInputStream( file );
        BufferedReader reader = new BufferedReader( new InputStreamReader( fis ) );
        String send;

        while ( ( send = reader.readLine() ) != null ) {
            procStdIn.write( send );
            System.out.println( send );
            copyStream( procES, System.err );
            copyStream( procIS, System.out );
        }
        procStdIn.write( "\r\nexit\r\n" );
        int exitCode = proc.waitFor();
        return exitCode == 0;
    }

    private void copyStream(InputStream is, PrintStream err) throws IOException {
        byte b[] = new byte[ 1024 ];
        int length;
        while ( is.available() > 0 && ( length = is.read( b ) ) > 0 ) {
            err.write( b, 0, length );
        }

}

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Я подозреваю, что вы блокируете чтение stdout и stderr.См. этот ответ для более подробной информации.

0 голосов
/ 01 октября 2015

Добавить:

procStdIn.flush();

после:

procStdIn.write( "\r\nexit\r\n" );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...