Java에서 외부 명령어 실행하기 샘플입니다.

외부 명령어 실행후 결과를 표준출력 합니다.

Java5부터는 ProcessBuilder라는게 생겼습니다.

 ProcessBuilder와 Scanner라는걸 사용해서 외부프로그램 결과를 입력받아

출력합니다. 

 

ProcessBuilderExample.java

import java.io.IOException;
import java.util.Scanner;
 
 
/**
 * @author falbb
 *
 */
public class ProcessBuilderExample {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 실행 커맨드
		String[] cmd = { "cmd", "/c", "tasklist", "/?" };
 
		Process process = null;
 
		try {
			// 프로세스빌더 실행
			process = new ProcessBuilder(cmd).start();
 
			// 스캐너클래스를 사용해 InputStream을 스캔함
			Scanner s = new Scanner(process.getInputStream());
			while (s.hasNextLine() == true) {
				// 표준출력으로 출력
				System.out.println(s.nextLine());
			}
 
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
}

 [실행결과]

TASKLIST [/S 시스템 [/U 사용자 이름 [/P [암호]]]]
         [/M [모듈] | /SVC | /V] [/FI 필터] [/FO 형식] [/NH]

설명:
    이 도구는 로컬 또는 원격 시스템에서 현재
    실행되고 있는 프로세스 목록을 표시합니다.

매개 변수 목록:
   /S     시스템           연결할 원격 시스템을 지정합니다.

   /U     [도메인\]사용자  명령을 실행해야 하는 사용자 컨텍스트를
                           지정합니다.

   /P     [암호]           해당 사용자 컨텍스트의 암호를 지정합니다.
                           생략한 경우에는 물어봅니다.

   /M     [모듈]           해당 exe/dll 이름을 사용하는 모든 작업을 
                           나열합니다. 모듈 이름을 지정하지 않으면
                           로드된 모든 작업을 나열합니다.

   /SVC                    각 프로세스에 호스트된 서비스를 표시합니다.

   /V                      자세한 작업 정보를 표시합니다.

   /FI    필터             필터에서 지정한 조건과 일치하는
                           작업 집합을 표시합니다.

   /FO    형식             출력 형식을 지정합니다.
                           사용할 수 있는 값: "TABLE", "LIST", "CSV".

   /NH                     출력에 표시하지 않을 "열 머리글"을
                           지정합니다.
                           "TABLE"과 "CSV" 형식에서만 사용할 수 있습니다.

    /?                     이 도움말 메시지를 표시합니다.

필터:
    필터 이름       유효한 연산자             유효한 값
    -----------     ---------------           --------------------------
    STATUS          eq, ne                    RUNNING | 
                                              NOT RESPONDING | UNKNOWN
    IMAGENAME       eq, ne                    이미지 이름
    PID             eq, ne, gt, lt, ge, le    PID 값
    SESSION         eq, ne, gt, lt, ge, le    세션 번호
    SESSIONNAME     eq, ne                    세션 이름
    CPUTIME         eq, ne, gt, lt, ge, le    CPU 시간
                                              (hh:mm:ss 형식)
                                              hh - 시간,
                                              mm - 분, ss - 초
    MEMUSAGE        eq, ne, gt, lt, ge, le    메모리 사용(KB)
    USERNAME        eq, ne                    사용자 이름([domain\]user
                                              형식)
    SERVICES        eq, ne                    서비스 이름
    WINDOWTITLE     eq, ne                    창 제목
    MODULES         eq, ne                    DLL 이름

참고: 원격 컴퓨터를 쿼리할 때 "WINDOWTITLE" 및 "STATUS" 필터는
       지원되지 않습니다.

예:
    TASKLIST
    TASKLIST /M
    TASKLIST /V /FO CSV
    TASKLIST /SVC /FO LIST
    TASKLIST /M wbem*
    TASKLIST /S 시스템 /FO LIST
    TASKLIST /S 시스템 /U domain\username /FO CSV /NH
    TASKLIST /S 시스템 /U 사용자 이름 /P 암호 /FO TABLE /NH
    TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"

자주 사용하는것이 아니지만 가끔 필요할때가 있어서 여기에다 올려봅니다.

 

감사합니다.