try {
p = r.exec("notepad");
} catch (Exception e) {
System.out.println("Error executing notepad.");
}
}
}
There are several alternative forms ofexec( ), but the one shown in the example is the most
common. TheProcessobject returned byexec( )can be manipulated byProcess’ methodsafter
the new program starts running. You can kill the subprocess with thedestroy( )method. The
waitFor( )method causes your program to wait until the subprocess finishes. TheexitValue( )
method returns the value returned by the subprocess when it is finished. This is typically 0
if no problems occur. Here is the precedingexec( )example modified to wait for the running
process toexit:
// Wait until notepad is terminated.
class ExecDemoFini {
public static void main(String args[]) {
Runtime r = Runtime.getRuntime();
Process p = null;
try {
p = r.exec("notepad");
p.waitFor();
} catch (Exception e) {
System.out.println("Error executing notepad.");
}
System.out.println("Notepad returned " + p.exitValue());
}
}
While a subprocess is running, you can write to and read from its standard input and
output. ThegetOutputStream( )andgetInputStream( )methods return the handles to
standardinandoutof the subprocess. (I/O is examinedin detail in Chapter 19.)
ProcessBuilder
ProcessBuilderprovides another way to start and manage processes (that is, programs). As
explained earlier, all processes are represented by theProcessclass, and a process can be
started byRuntime.exec( ).ProcessBuilderoffers more control over the processes. For
example, you can set the current working directory and change environmental parameters.
ProcessBuilderdefines these constructors:
ProcessBuilder(List<String>args)
ProccessBuilder(String ...args)
Here,argsis a list of arguments that specify the name of the program to be executed along
with any required command-line arguments. In the first constructor, the arguments are
passed in aList. In the second, they are specified through a varargs parameter. Table 16-12
describes the methods defined byProcessBuilder.
Chapter 16: Exploring java.lang 407