개발/Linux
백그라운드로 작업하는 몇 가지 방법
Jaeyeon Baek
2017. 12. 2. 22:55
*NIX 머신에 SSH (혹은 Telnet) 로 원격 접속을 하고 프로세스를 백그라운드로 실행하는 경우에 로그아웃(exit)시 실행 됐던 프로세스가 중지 되버리는 현상을 보게 된다. 이는 원격으로 접속한 Shell 이 SSH 연결을 끊는 경우 종료되면서 자식 프로세스에 모두 STOP 시그널을 전송하기 때문인데 이것을 회피하는 몇 가지 방법을 기술한다.
의존 관계 없이 백그라운드로 실행
prog.sh > /dev/null >2&1 &
모든 output 을 생략하고 백그라운드로 실행. 부모와 Shell 과 의존이 없기 때문에 SSH 연결이 종료 되어도 prog.sh 은 계속 실행 상태를 유지한다.
nohup
nohup prog.sh &
말 그대로 HUP 신호를 무시하는 명령어이다. 보다 자세한 설명은 위키를 참고하도록 하자.
screen
아마도 경우에 따라 가장 이상적인 방법일텐데 새로운 screen 환경을 만들고 그 안에서 prog.sh 을 실행한다. 그리고 screen 에서 detach 하도록 한다. detach 라는 단어를 보면 단숨에 알 수 있듯이 다시 screen 에 attach 해서 작업되고 있는 내용을 지켜볼 수 있다. 앞선 방법들과 비교했을 때 가장 큰 차이점이라고 할 수 있다. SSH 연결을 끊었다가 다시 접속을 하고 screen 에 attach 하면 마치 계속 화면을 출력 해놓은 것 같은 효과를 확인하게 된다.