java에서 쉘스크립트를 실행하는 기능을 추가 했다.
문제는 자바 프로그램이 종료되면 쉘스크립트 역시 1~2초 후에 멈춰 버린다.
쉘스크립트는 while true로 무한루프로 실행이 되는 스크립트였다.
자바에서 실행 명렁어를 nohup, &, sh -c 등 이것 저것 다 해 보았지만 쉘스크립트는 멈췄다.
결국 찾은 방법은 두가지이다. 두가지 방법 다 정석적인 해결책은 아니고 trick으로 볼수 있는 방법이다.
하나는 중간 launch 스크립트를 두는 방식이다.
실제 내가 실행해야 할 스크립트가 target.sh 이면 launcher.sh를 둬서 자바에서는 launcher.sh를 실행하는 방법이다.
launcher.sh에는 아래와 같은 명령을 넣는다.
#/bin/sh
nohup ./target.sh 1> /dev/null 2>&1 &
다른 하나는 trap을 사용한 방법이다.
trap 명령어는 특정 시그널이 들어올 때 어떤 일을 할 지 적용할 수 있다.
실제 적용한 방법은 두번째 방법으로 trap명령어를 통한 방법이다.
적용 방법은 아래와 같다.
trap "method_name" 0
0은 EXIT 인 경우 이다. 자바 프로세스 종료시 EXIT 시그널이 오는 데, 그 때 loop를 사용하는 method_name를 다시 한번 사용하게 하였다.
종료는 9(SIGKILL) 시그널을 발생시켜서 종료하므로 문제 없이 stop을 할 수 있다.