JavaTM Platform
Standard Ed. 6

java.lang
클래스 ProcessBuilder

java.lang.Object 
  상위를 확장 java.lang.ProcessBuilder


public final class ProcessBuilder
extends Object

이 클래스는, operating system의 프로세스의 작성에 사용됩니다.

ProcessBuilder 인스턴스는, 프로세스 속성의 컬렉션을 관리합니다. start() 메소드는, 이러한 속성을 가지는 신규 Process 인스턴스를 작성합니다. 같은 인스턴스로부터 start() 메소드를 반복해 호출해, 동일한 속성 또는 관련하는 속성을 가지는 신규 서브 프로세스를 작성할 수 있습니다.

각 프로세스 빌더는, 다음의 프로세스 속성을 관리합니다.

프로세스 빌더의 속성을 변경하면(자), 속성을 변경한 객체의 start() 메소드로 그 이후 기동되는 프로세스에 영향이 있습니다만, 그 이전에 기동된 프로세스나 Java 프로세스 자체에는 영향 없습니다.

대부분의 에러 체크는 start() 메소드로 실행됩니다. start() 가 실패하도록(듯이), 객체 상태를 변경할 수가 있습니다. 예를 들어, 커멘드 속성을 빈 상태(empty)의 리스트로 설정하면(자), start() 가 불려 가지 않는 이상 예외는 throw 되지 않습니다.

이 클래스는 동기화 되지 않습니다. 복수의 thread가 ProcessBuilder 인스턴스에 병행해 액세스 해, 적어도 1 개의 thread가 구조적으로 1 개의 속성을 변경했을 경우, 변경된 속성은 외부에서 동기화 되지 않으면 안됩니다.

디폴트의 작업 디렉토리와 환경을 사용하는 새로운 프로세스를 기동하는 것은, 다음에 나타내도록(듯이) 용이합니다.

 Process p = new ProcessBuilder("myCommand", "myArg"). start();
 

변경된 작업 디렉토리와 환경을 포함한 프로세스를 기동하는 예를 다음에 나타냅니다.

 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 Process p = pb.start();
 

환경 변수의 명시적 세트를 가지는 프로세스를 기동하려면 , 우선 Map.clear() 를 호출하고 나서, 환경 변수를 추가합니다.

도입된 버젼:
1.5

생성자 의 개요
ProcessBuilder (List <String > command)
          지정된 operating system 프로그램과 인수를 가지는 프로세스 빌더를 구축합니다.
ProcessBuilder (String ... command)
          지정된 operating system 프로그램과 인수를 가지는 프로세스 빌더를 구축합니다.
 
메소드의 개요
 List <String > command ()
          프로세스 빌더의 operating system 프로그램과 인수를 돌려줍니다.
 ProcessBuilder command (List <String > command)
          이 프로세스 빌더의 operating system 프로그램과 인수를 설정합니다.
 ProcessBuilder command (String ... command)
          이 프로세스 빌더의 operating system 프로그램과 인수를 설정합니다.
 File directory ()
          이 프로세스 빌더의 작업 디렉토리를 돌려줍니다.
 ProcessBuilder directory (File  directory)
          이 프로세스 빌더의 작업 디렉토리를 설정합니다.
 Map <String ,String > environment ()
          이 프로세스 빌더의 환경의 캐릭터 라인 맵의 뷰를 돌려줍니다.
 boolean redirectErrorStream ()
          이 프로세스 빌더가 표준 에러와 표준 출력을 머지 할지 어떨지를 판정합니다.
 ProcessBuilder redirectErrorStream (boolean redirectErrorStream)
          이 프로세스 빌더의 redirectErrorStream 프로퍼티을 설정합니다.
 Process start ()
          이 프로세스 빌더의 속성을 사용해 신규 프로세스를 기동합니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

생성자 의 상세

ProcessBuilder

public ProcessBuilder(List <String > command)
지정된 operating system 프로그램과 인수를 가지는 프로세스 빌더를 구축합니다. 이 생성자 은,command 리스트의 카피를 작성하지 않습니다. 이후의 리스트의 갱신은, 프로세스 빌더 상태에 반영됩니다. command 가 유효한 operating system 커멘드에 대응할지 어떨지는 체크되지 않습니다.

파라미터:
command - 프로그램과 프로그램의 인수를 포함한 리스트
예외:
NullPointerException - 인수가 null 의 경우

ProcessBuilder

public ProcessBuilder(String ... command)
지정된 operating system 프로그램과 인수를 가지는 프로세스 빌더를 구축합니다. 이 생성자 은,command 배열과 같은 캐릭터 라인을 포함한 캐릭터 라인 리스트에, 프로세스 빌더의 커멘드를 같은 순서로 설정하는 간이 생성자 입니다. command 가 유효한 operating system 커멘드에 대응할지 어떨지는 체크되지 않습니다.

파라미터:
command - 프로그램과 프로그램의 인수를 포함한 캐릭터 라인 배열
메소드의 상세

command

public ProcessBuilder  command(List <String > command)
이 프로세스 빌더의 operating system 프로그램과 인수를 설정합니다. 이 메소드는,command 리스트의 카피를 작성하지 않습니다. 이후의 리스트의 갱신은, 프로세스 빌더 상태에 반영됩니다. command 가 유효한 operating system 커멘드에 대응할지 어떨지는 체크되지 않습니다.

파라미터:
command - 프로그램과 프로그램의 인수를 포함한 리스트
반환값:
이 프로세스 빌더
예외:
NullPointerException - 인수가 null 의 경우

command

public ProcessBuilder  command(String ... command)
이 프로세스 빌더의 operating system 프로그램과 인수를 설정합니다. 이 생성자 은,command 배열과 같은 캐릭터 라인을 포함한 캐릭터 라인 리스트에 커멘드를 같은 순서로 설정하는 편리한 메소드입니다. command 가 유효한 operating system 커멘드에 대응할지 어떨지는 체크되지 않습니다.

파라미터:
command - 프로그램과 프로그램의 인수를 포함한 캐릭터 라인 배열
반환값:
이 프로세스 빌더

command

public List <String > command()
프로세스 빌더의 operating system 프로그램과 인수를 돌려줍니다. 반환된 리스트는 카피가 아닙니다. 이후의 리스트의 갱신은, 프로세스 빌더 상태에 반영됩니다.

반환값:
프로세스 빌더의 프로그램과 프로그램의 인수

environment

public Map <String ,String > environment()
이 프로세스 빌더의 환경의 캐릭터 라인 맵의 뷰를 돌려줍니다. 프로세스 빌더가 작성될 때마다, 환경은 현재의 프로세스 환경의 카피에 초기화됩니다 (System.getenv() 를 참조). 이 객체의 start() 메소드로 기동되는 이후의 서브 프로세스는, 이 맵을 환경으로서 사용합니다.

반환된 객체는, 일반적으로 Map 오퍼레이션을 사용해 변경할 수 있습니다. 이러한 변경은,start() 메소드를 사용해 기동된 서브 프로세스로 가시입니다. 2 개의 ProcessBuilder 인스턴스는 항상 독립한 프로세스 환경을 가지고 있습니다. 이 때문에, 반환된 맵은, 다른 ProcessBuilder 인스턴스나,System.getenv 로 반환된 값에 반영될 것은 없습니다.

시스템이 환경 변수를 지원하고 있지 않는 경우는, 빈 상태(empty)의 맵이 돌려주어집니다.

반환된 맵은, null 의 키나 값을 허용 하지 않습니다. null 의 키나 값을 삽입하거나 이것들이 있는지 조회하면(자),NullPointerException 가 throw 됩니다. String 형이 아닌 키나 값이 있을지 어떨지 쿼리를 실행하면(자),ClassCastException 가 throw 됩니다.

반환된 맵의 동작은 시스템에 의존합니다. 환경 변수의 변경을 허가하지 않는 시스템이 있으면, 특정의 변수명이나 값이 금지되는 시스템도 있습니다. 이 이유로부터, operating system로 변경이 허가되어 있지 않은 경우, 맵을 변경하려고 하면(자),UnsupportedOperationExceptionIllegalArgumentException 로 실패할 가능성이 있습니다.

환경 변수명과 환경 변수의 값의 외부 형식은 시스템에 의존하므로, 환경 변수명과 환경 변수의 값과 Java 의 Unicode 캐릭터 라인과의 사이에 1 대 1 의 매핑 관계가 없을 가능성이 있습니다. 그 경우에서도, Java 코드로 변경되어 있지 않은 환경 변수가, 서브 프로세스에서도 변경되어 있지 않은 네이티브인 표현을 가지도록(듯이) 맵은 구현됩니다.

반환된 맵과 그 코레크션뷰는,Object.equals(java.lang.Object) 메소드와 Object.hashCode() 메소드의 범용 규약에 따르지 않을 가능성이 있습니다.

반환된 맵은, 일반적으로 모든 플랫폼에서 대문자와 소문자를 구별합니다.

시큐리티 매니저가 존재하는 경우는,RuntimePermission ("getenv. *") 액세스권을 사용해 checkPermission 메소드가 불려 갑니다. 이 결과,SecurityException 가 throw 되는 일이 있습니다.

Java 서브 프로세스에 정보를 건네주는 경우, 일반적으로 환경 변수보다시스템 프로퍼티이 추천 됩니다.

반환값:
이 프로세스 빌더의 환경
예외:
SecurityException - 시큐리티 매니저가 존재해,checkPermission 메소드가 프로세스 환경에의 액세스를 허가하지 않을 때
관련 항목:
Runtime.exec(String[], String[], java.io.File) , System.getenv()

directory

public File  directory()
이 프로세스 빌더의 작업 디렉토리를 돌려줍니다. 이 이후, 이 객체의 start() 메소드로 기동된 서브 프로세스는, 이 디렉토리를 작업 디렉토리로서 사용합니다. 반환값은,null 의 가능성이 있습니다. 이것은, 현재의 Java 프로세스의 작업 디렉토리 (일반적으로은 user.dir 시스템 프로퍼티으로 지정된 디렉토리)를 child process의 작업 디렉토리로서 사용하는 것을 의미합니다.

반환값:
이 프로세스 빌더의 작업 디렉토리

directory

public ProcessBuilder  directory(File  directory)
이 프로세스 빌더의 작업 디렉토리를 설정합니다. 이 이후, 이 객체의 start() 메소드로 기동된 서브 프로세스는, 이 디렉토리를 작업 디렉토리로서 사용합니다. 인수는,null 의 가능성이 있습니다. 이것은, 현재의 Java 프로세스의 작업 디렉토리 (일반적으로은 user.dir 시스템 프로퍼티으로 지정된 디렉토리)를 child process의 작업 디렉토리로서 사용하는 것을 의미합니다.

파라미터:
directory - 신규 작업 디렉토리
반환값:
이 프로세스 빌더

redirectErrorStream

public boolean redirectErrorStream()
이 프로세스 빌더가 표준 에러와 표준 출력을 머지 할지 어떨지를 판정합니다.

이 프로퍼티이 true 의 경우, 이 객체의 start() 메소드로 그 이후 기동된 서브 프로세스에 의해 생성되는 에러 출력은, 표준 출력과 머지 됩니다. 이것에 의해,Process.getInputStream() 메소드를 사용해, 에러 출력과 표준 출력의 양쪽 모두를 읽어낼 수가 있습니다. 머지에 의해, 에러 메세지와 대응하는 출력과의 상관을 나타내는 것이 용이하게 됩니다. 초기치는 false 입니다.

반환값:
이 프로세스 빌더의 redirectErrorStream 프로퍼티

redirectErrorStream

public ProcessBuilder  redirectErrorStream(boolean redirectErrorStream)
이 프로세스 빌더의 redirectErrorStream 프로퍼티을 설정합니다.

이 프로퍼티이 true 의 경우, 이 객체의 start() 메소드로 그 이후 기동된 서브 프로세스에 의해 생성되는 에러 출력은, 표준 출력과 머지 됩니다. 이것에 의해,Process.getInputStream() 메소드를 사용해, 에러 출력과 표준 출력의 양쪽 모두를 읽어낼 수가 있습니다. 머지에 의해, 에러 메세지와 대응하는 출력과의 상관을 나타내는 것이 용이하게 됩니다. 초기치는 false 입니다.

파라미터:
redirectErrorStream - 새로운 프로퍼티의 값
반환값:
이 프로세스 빌더

start

public Process  start()
              throws IOException 
이 프로세스 빌더의 속성을 사용해 신규 프로세스를 기동합니다.

이 신규 프로세스는,directory() 로 지정된 작업 디렉토리의,environment() 로 지정된 프로세스 환경을 가지는,command() 로 지정된 커멘드와 인수를 호출합니다.

이 메소드는, 커멘드가 유효한 operating system 커멘드인 것을 체크합니다. 어느 커멘드가 유효한가는 시스템 의존입니다만, 커멘드는 적어도 null 이외의 캐릭터 라인의 빈 상태(empty)이 아닌 리스트가 아니면 안됩니다.

시큐리티 매니저가 존재하는 경우는,command 배열의 최초의 컴퍼넌트를 인수로서 사용해 checkExec 메소드가 불려 갑니다. 이 결과,SecurityException 가 throw 되는 일이 있습니다.

operating system 프로세스의 기동은 극히 시스템에 의존합니다. 발생할 가능성이 있는 불편은 다음과 같습니다.

이상의 케이스에서는, 예외가 throw 됩니다. 예외의 정확한 특성은 시스템에 의존합니다만, 이것은 항상 IOException 의 서브 클래스가 됩니다.

이 프로세스 빌더에의 이후의 변경은, 반환된 Process 에 영향을 미치지 않습니다.

반환값:
서브 프로세스를 관리하기 위한 신규 Process 객체
예외:
NullPointerException - 커멘드 리스트의 요소가 null 의 경우
IndexOutOfBoundsException - 커멘드가 빈 상태(empty) (사이즈가 0)의 리스트의 경우
SecurityException - 시큐리티 매니저가 존재해,checkExec 메소드가 서브 프로세스의 작성을 허가하지 않는 경우
IOException - 입출력 에러가 발생했을 경우
관련 항목:
Runtime.exec(String[], String[], java.io.File) , SecurityManager.checkExec(String)

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.