Linux와 커맨드 라인 기초
SSH로 접속한 서버에서 시간이 걸리는 처리를 './run.sh &'로 시작한 다음 접속을 끊었더니 처리도 멈춰 버렸다. 접속을 끊은 후에도 처리를 계속하게 하는 시작 방법으로 가장 적절한 것은?
- A./run.sh > run.log 2>&1 &
- Bnice -n 19 ./run.sh > run.log 2>&1 &
- Cnohup ./run.sh > run.log 2>&1 &
정답과 해설 보기
정답: C. nohup ./run.sh > run.log 2>&1 &
접속이 끊기면 터미널의 행업을 알리는 SIGHUP이 셸(shell)에 보내지고, bash 등의 셸은 자신의 작업에도 SIGHUP을 보냅니다. SIGHUP을 받았을 때의 기본 동작은 종료이므로 백그라운드 작업도 멈춥니다. nohup은 명령이 SIGHUP을 무시하도록 하여 시작하며, 출력을 파일로 향하게 해 두면 접속을 끊은 후에도 처리가 계속됩니다. 출력을 리다이렉션하지 않고 터미널에서 시작하면, nohup은 출력을 nohup.out이라는 파일에 씁니다. tmux나 screen 같은 터미널 다중화 소프트웨어를 사용하여 나중에 같은 화면에 다시 연결하는 방법도 자주 쓰입니다.