В Java нет функции fork (), но есть ProcessBuilder и Runtime.exec () для запуска новых процессов (объектов класса Process).Вы можете думать об этом как о паре fork () / exec (), но без возможности выполнять что-то промежуточное, например dup2 ().Это означает, что вы не можете перенаправить stdio дочернего процесса, но вы можете явно записать что-то в его stdin и прочитать из его stdout и stderr, используя соответствующие методы Process или, если быть точным, соответствующие методы потоков ввода / выводавозвращается методами getInputStream () / getOutputStream () / getErrorStream () класса Process.Это может быть допустимым обходным решением, если вы хотите иметь процессы вместо потоков.
Если вы хотите использовать потоки, то все они используют один и тот же stdio.Вы можете перенаправить его, но это будет бессмысленно, поскольку перенаправление повлияет на все потоки.Вы можете использовать своего рода имитацию IPC с потоками, используя пользовательские реализации InputStream / OutputStream, или вы можете захотеть взглянуть на пару PipedInputStream / PipedOutputStream.На самом деле их можно использовать для установки чего-то вроде канала IPC, возможно, в сочетании с BufferedInputStream / BufferedOutputStream, чтобы избежать чрезмерной блокировки.