Java Process
Runtime.exec causes duplicate JVM to hang indefinitely until killed (Solaris 10)
hello world » Java에서 외부 프로세스를 실행할 때
Java 6 이하에서
Runtime.exec()
로 프로세스를 띄우면 현재 프로세스의 모든 메모리를 복재한 자식 프로세스가 뜨기 때문에 심각한 메모리 문제를 야기할 수 있다.
해결책은 3가지 정도인데, 그 중에서 별도의 작은 프로세스를 띄워 소켓 통신하여 별도 프로세스에서 명령을 실행시키는 방식이 좋다.
Java Posix Spawn
메모리 문제를 해결한 프로세스 생성 라이브러리
Java Service Wrapper
메모리 문제를 해결한 프로세스 생성 라이브러리
JDK 7부터는 Linux에서
fork()
함수 대신
vfork()
함수를 기본으로 호출한다. JDK 8부터 Solaris와 BSD에서는
posix_spawn
을 기본으로 호출한다.