Cómo ejecutar comandos de terminal de Windows, Linux, macOS en Java y devolver un resultado completo

Publicado: 2019-02-26

Ejecute los comandos de Linux mkdir, ls -ltra y ping en Java

Ejecutar un system command es relativamente simple, una vez que lo haya visto por primera vez.

Implica el uso de dos clases Java, la clase Runtime y la clase Process. Básicamente, usa el exec method de la clase Runtime para ejecutar el comando como un proceso separado.

La invocación del método exec devuelve un objeto Process para administrar el subproceso. Luego usa los getInputStream() y getErrorStream() del objeto Process para leer la salida normal del comando y la salida de error del comando. Lo que haga con la salida del comando ejecutado depende completamente de usted y de la aplicación que está creando.

Los ProcessBuilder.start() y Runtime.exec crean un proceso nativo y devuelven una instancia de una subclase de Process que se puede usar para controlar el proceso y obtener información sobre él.

La clase Process proporciona métodos para realizar la entrada del proceso, realizar la salida del proceso, esperar a que se complete el proceso, verificar el estado de salida del proceso y destruir (matar) el proceso.

Es posible que los métodos que crean procesos no funcionen bien para procesos especiales en ciertas plataformas nativas, como procesos de ventanas nativos, procesos daemon, procesos Win16/DOS en Microsoft Windows o scripts de shell.

Por defecto, el subproceso creado no tiene su propio terminal o consola. Todas sus operaciones de E/S estándar (es decir, stdin, stdout, stderr) se redirigirán al proceso principal, donde se puede acceder a ellas a través de los flujos obtenidos mediante los métodos getOutputStream() , getInputStream() y getErrorStream() .

El proceso principal usa estos flujos para alimentar la entrada y obtener la salida del subproceso. Debido a que algunas plataformas nativas solo proporcionan un tamaño de búfer limitado para flujos de entrada y salida estándar, si no se escribe rápidamente el flujo de entrada o no se lee el flujo de salida del subproceso, el subproceso puede bloquearse o incluso bloquearse.

A continuación hay dos ejemplos simples de Java para su referencia.

Ejemplo 1. Ejecute mkdir, ls -ltra y ping en Java

  • Crear archivo CrunchifyCommandJava.java
  • Ejecute mkdir /Users/ashah/Desktop/new-folder
  • Ejecutar ls -ltra /Library
  • Ejecutar ping crunchify.com

Asegúrese de cambiar la ruta en consecuencia en el programa anterior según la configuración de su sistema.

Salida de la consola Eclipse:

Simplemente ejecute el programa anterior como una aplicación Java y verá un resultado similar.

Ejemplo-2.

  • CrunchifyRunCommand.java
  • Ejecute el comando ps -few para obtener una lista de todos los procesos que se ejecutan en su sistema.

Salida de la consola Eclipse:

Estos son algunos de los procesos que se ejecutan en mi MacBook Pro. Hay bastantes mas pero pegado muy pocos.

Espero que este tutorial lo ayude a ejecutar cualquier comando de terminal de Linux, macOS usando un programa Java simple. Avisame para cualquier duda.