Java에서 Windows, Linux, macOS 터미널 명령을 실행하고 완전한 결과를 반환하는 방법

게시 됨: 2019-02-26

Java에서 Linux 명령 mkdir, ls -ltra 및 ping 실행

system command 을 실행하는 것은 상대적으로 간단합니다. 일단 실행을 처음 본 후에는 간단합니다.

여기에는 Runtime 클래스와 Process 클래스의 두 가지 Java 클래스 사용이 포함됩니다. 기본적으로 Runtime 클래스의 exec method 를 사용하여 별도의 프로세스로 명령을 실행합니다.

exec 메서드를 호출하면 하위 프로세스를 관리하기 위한 Process 개체가 반환됩니다. 그런 다음 Process 객체의 getInputStream()getErrorStream() 메서드를 사용하여 명령의 일반 출력과 명령의 오류 출력을 읽습니다. 실행된 명령의 출력으로 수행하는 작업은 전적으로 사용자와 생성 중인 애플리케이션에 달려 있습니다.

ProcessBuilder.start()Runtime.exec 메서드는 기본 프로세스를 만들고 프로세스를 제어하고 이에 대한 정보를 얻는 데 사용할 수 있는 Process 의 하위 클래스 인스턴스를 반환합니다.

Process 클래스는 프로세스에서 입력을 수행하고, 프로세스로 출력을 수행하고, 프로세스가 완료되기를 기다리고, 프로세스의 종료 상태를 확인하고, 프로세스를 소멸(종료)하는 메서드를 제공합니다.

프로세스를 생성하는 방법은 기본 윈도우 프로세스, 데몬 프로세스, Microsoft Windows의 Win16/DOS 프로세스 또는 셸 스크립트와 같은 특정 기본 플랫폼의 특수 프로세스에서 제대로 작동하지 않을 수 있습니다.

기본적으로 생성된 하위 프로세스에는 자체 터미널이나 콘솔이 없습니다. 모든 표준 I/O(예: stdin, stdout, stderr) 작업은 부모 프로세스로 리디렉션되며 getOutputStream() , getInputStream()getErrorStream() 메서드를 사용하여 얻은 스트림을 통해 액세스할 수 있습니다.

상위 프로세스는 이러한 스트림을 사용하여 하위 프로세스에 입력을 제공하고 출력을 얻습니다. 일부 기본 플랫폼은 표준 입력 및 출력 스트림에 대해 제한된 버퍼 크기만 제공하기 때문에 입력 스트림을 즉시 쓰거나 하위 프로세스의 출력 스트림을 읽지 못하면 하위 프로세스가 차단되거나 교착 상태가 될 수도 있습니다.

다음은 참조용으로 두 가지 간단한 Java 예제입니다.

예-1. Java에서 mkdir, ls -ltra 및 ping 실행

  • CrunchifyCommandJava.java 파일 생성
  • mkdir /Users/ashah/Desktop/new-folder 실행
  • ls -ltra /Library 실행
  • ping crunchify.com 실행

시스템 설정에 따라 위의 프로그램에서 경로를 적절하게 변경하십시오.

Eclipse 콘솔 출력:

위의 프로그램을 Java 응용 프로그램으로 실행하면 비슷한 결과를 볼 수 있습니다.

예-2.

  • CrunchifyRunCommand.java
  • ps -few 명령을 실행하여 시스템에서 실행 중인 모든 프로세스의 목록을 가져옵니다.

Eclipse 콘솔 출력:

이것은 내 MacBook Pro에서 실행되는 일부 프로세스입니다. 꽤 많이 있지만 아주 일부만 붙였습니다.

이 튜토리얼이 간단한 Java 프로그램을 사용하여 모든 Linux, macOS 터미널 명령을 실행하는 데 도움이 되기를 바랍니다. 질문이 있으면 알려주세요.