Как запускать команды терминала Windows, Linux, macOS на Java и возвращать полный результат

Опубликовано: 2019-02-26

Выполнение команд Linux mkdir, ls -ltra и ping в Java

Выполнить system command относительно просто — если вы впервые увидели ее выполнение.

Он включает использование двух классов Java, класса Runtime и класса Process. По сути, вы используете exec method класса Runtime для запуска команды как отдельного процесса.

Вызов метода exec возвращает объект Process для управления подпроцессом. Затем вы используете методы getInputStream() и getErrorStream() объекта Process для чтения нормального вывода команды и вывода ошибки команды. То, что вы делаете с выводом выполненной команды, полностью зависит от вас и создаваемого вами приложения.

ProcessBuilder.start() и Runtime.exec создают собственный процесс и возвращают экземпляр подкласса Process , который можно использовать для управления процессом и получения информации о нем.

Класс Process предоставляет методы для выполнения ввода из процесса, выполнения вывода в процесс, ожидания завершения процесса, проверки состояния выхода процесса и уничтожения (уничтожения) процесса.

Методы создания процессов могут плохо работать для специальных процессов на определенных собственных платформах, таких как собственные оконные процессы, процессы демона, процессы Win16/DOS в Microsoft Windows или сценарии оболочки.

По умолчанию созданный подпроцесс не имеет собственного терминала или консоли. Все его стандартные операции ввода-вывода (то есть stdin, stdout, stderr) будут перенаправлены родительскому процессу, где к ним можно будет получить доступ через потоки, полученные с помощью методов getOutputStream() , getInputStream() и getErrorStream() .

Родительский процесс использует эти потоки для подачи входных данных и получения выходных данных от подпроцесса. Поскольку некоторые собственные платформы предоставляют только ограниченный размер буфера для стандартных входных и выходных потоков, неспособность быстро записать входной поток или прочитать выходной поток подпроцесса может привести к блокировке или даже взаимоблокировке подпроцесса.

Ниже приведены два простых примера Java для справки.

Пример-1. Выполнить mkdir, ls -ltra и ping в Java

  • Создать файл CrunchifyCommandJava.java
  • Выполнить mkdir /Users/ashah/Desktop/new-folder
  • Выполнить ls -ltra /Library
  • Выполнить ping crunchify.com

Обязательно измените путь в приведенной выше программе в соответствии с настройками вашей системы.

Вывод консоли Eclipse:

Просто запустите указанную выше программу как Java-приложение, и вы увидите аналогичный результат.

Пример-2.

  • CrunchifyRunCommand.java
  • Выполните команду ps -few , чтобы получить список всех процессов, запущенных в вашей системе.

Вывод консоли Eclipse:

Вот некоторые из процессов, запущенных на моем MacBook Pro. Есть еще довольно много, но вставлено очень мало.

Я надеюсь, что это руководство поможет вам запускать любые команды терминала Linux и macOS, используя простую программу Java. Дайте мне знать по любым вопросам.