Contenidos
Si deseas comunicar dos procesos en el mismo equipo sin utilizar sockets, una opción es utilizar la comunicación interprocesos (IPC, por sus siglas en inglés) a través de pipes o tuberías. En Kotlin, puedes utilizar la clase Process
para crear y controlar procesos.
Proceso padre
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import java.io.BufferedReader import java.io.InputStreamReader import java.io.OutputStreamWriter fun main() { // Crear el proceso hijo, ruta para IntelliJ val processBuilder = ProcessBuilder("java", "-cp", "/Users/lamac/IdeaProjects/comunidcarhilos/out/production/comunidcarhilos/", "HijoKt") // Cambiar "ChildProcess" por el nombre de la clase principal del proceso hijo processBuilder.redirectErrorStream(true) val process = processBuilder.start() val inputReader = BufferedReader(InputStreamReader(System.`in`)) val outputWriter = OutputStreamWriter(process.outputStream) val inputChild = BufferedReader(InputStreamReader(process.inputStream)) val childMessage = "Hola desde el proceso padre!" outputWriter.write("$childMessage\n") outputWriter.flush() val responseMessage = inputChild.readLine() println("Mensaje recibido del proceso hijo: $responseMessage") process.waitFor() println("Proceso hijo finalizado con código de salida: ${process.exitValue()}") } |
Proceso hijo
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.io.BufferedReader import java.io.InputStreamReader import java.io.OutputStreamWriter fun main() { val inputReader = BufferedReader(InputStreamReader(System.`in`)) val outputWriter = OutputStreamWriter(System.out) val parentMessage = inputReader.readLine() outputWriter.write("$parentMessage\n") outputWriter.flush() } |