Andrei
Andrei

Reputation: 37

Process launched from Java code doesn't return

This is my code :

Process p1;
    try {
        p1 = Runtime.getRuntime().exec( "utils/a.out < utils/test_c2.txt > utils/result.txt" );
        p1.waitFor();
    } catch ( Exception e ) {
        System.out.println("Something went bad!");
    }

I've read that there should be a problem with the input buffer size, but in this case, all the output from the launched process is redirected to " utils/result.txt", so the launched process should not reach deadlock. When I run the same command from terminal it works. Maybe it would be helpful to describe what is "a.out". I obtained it from a flex file as follows:

$ flex rulex.lex
$ gcc lex.yy.c -lfl

Any help would be appreciated.

Upvotes: 0

Views: 41

Answers (1)

Erik Ekman
Erik Ekman

Reputation: 2066

The subprocess is waiting to read data on stdin. Java does not launch the subprocess within a shell, so no pipes are available. You need to make your subprogram take files as arguments and open the files itself. Another option is to start a shell (like bash) and tell it to run the program, then the piping of files will work.

Upvotes: 1

Related Questions