linux 에서는 exit 로 세션을 종료할 경우 터미널과 연결이 끊어졌다는 HUP 시그널이 발생하고 자식 프로세스들은 STOP 시그널을 받게 됩니다.

bg 명령으로 프로세스를 백그라운드로 실행해도 logout 하면 자식 프로세스들은 STOP 시그널을 받으므로 종료됩니다.


SSH 등으로 원격지에 접속했을 때 연결 종료후에도 실행되야 하는 프로세스가 있다면 bg 명령어만으로는 안되고 nohup 명령어를 사용해야 합니다.


nohup 는 no hang up 의 약자로 터미널이 끊어져도 HUP 를 시그널이 발생하지 않게 해주므로  프로세스들이 종료하지 않게 해줍니다.


사용하려면 다음과 같이 nohup 뒤에 실행할 프로세스 이름을 써주고 백그라운드로 실행해주면 됩니다.

예로 다음 명령어는 리모트 복제 프로그램인 rsync 를 계속 실행해 줍니다.

nohup rsync -a test test_dest &
BASH


위와 같이 실행할 경우 rsync는  표준 출력(stdout)과 표준 에러(stderr)에 진행 결과를 표시하므로 터미널에 hang 이 걸릴수 있습니다.


이럴 경우 표준 출력과 표준 에러를 파일로 redirection 해주면 됩니다.

nohup rsync -a test test_dest > foo.out 2> foo.err < /dev/null &
BASH

최신 리눅스는 systemd-run 사용을 권장하고 있습니다.


같이 보기

Ref