터미널에서 실행하는 프로그램 즉 프로세스들은 터미널이 종료되면 프로세스들도 같이 종료된다.
터미널이 종료되는 것을 세션의 끊김이라 표현하고, logout이라고도 표현한다.
이때 터미널이 종료됨과 함께 hup이라는 signal을 보내 해당 터미널을 통해 실행된 프로세스들을 종료하는 신호를 보낸다.
이 경우에 'hup 시그널을 받아도 받지 않은 것처럼 있겠다~~' 가 바로 nohup이다.
예시와 함께 좀 더 이해하자!
여기 ABC.jar 파일이 있다.
이를 실행시키기 위해서는 아래와 같이 터미널에 입력한다.
java -jar ABC.jar
근데 이렇게 입력하게 되면, 터미널의 한창이 ABC.jar 파일을 실행하느라 다른 작업을 못하게 된다.
따라서 터미널 화면을 볼 수 있고, ABC.jar도 함께 실행되도록 백그라운드 실행을 함께 추가해준다.
java -jar ABC.jar &
뒤에 &만 추가해주면 백그라운드에서 실행이 된다.
하지만, 이렇게 하면 터미널의 세션이 끊길때 hup signal로 ABC.jar의 프로세스를 종료될 것이다.
이를 막기 위해
nohup java -jar ABC.jar &
위와 같이 실행해주면 백그라운드에서 실행되며 터미널이 종료되어도 그대로 실행되고 있을 것이다.
만약 이 ABC.jar 프로세스를 종료하고 싶다면.
ps -all
을 이용해 java로 실행되고 있는 프로세스의 pid를 확인한뒤
kill -9 {프로세스 pid}
위와 같이 종료해주면 된다!
노헙!!