Посмотрите на источник JDK .
В этом случае, для Unix, посмотрите на UnixProcess class.it делает fork и exec и оборачивает потоки файлов и буферов вокруг собственных дескрипторов файлов.
pid = forkAndExec(prog,
argBlock, argc,
envBlock, envc,
dir,
redirectErrorStream,
stdin_fd, stdout_fd, stderr_fd);
stdin_stream = new BufferedOutputStream(new FileOutputStream(stdin_fd));
Для нативного кода посмотрите на:
родной / Java / языки / UNIXProcess_md.c
Это делает что-то интересное!
он открывает каналы и передает их как STDIN, STDOUT, STDERR дочернему элементу, а другой канал используется родительским элементом!
Вкратце механизм МПК - это трубы.