본문 바로가기

기타

[LINUX] 포그라운드/백그라운드 프로세스(nohup, &)

 

[ 리눅스 프로그램 실행 방식 ]

 

* 포그라운드 프로세스 (Foreground Process)
 - 기본적으로 터미널에서 실행되는 명령어는 포그라운드 프로세스로 실행.
 - 사용자와 상호작용하며, 실행이 완료될 때까지 터미널 대기.
 - 터미널 종료, 사용자 세션 종료 ==> 프로세스 종료.

 

./script.sh
bash script.sh
python3 myscript.py

 

* 백그라운드 프로세스 (Background Process)
 - 실행 이후에도 터미널을 차단하지 않고 계속 실행. (PID출력 후 바로 프롬프트 반환)
 - 사용자와 상호작용 없이 동작.
 - 터미널 종료, 사용자 세션 종료에도 계속 실행하기 위해서는 명령어 필요.
  ==> nohup, setsid, screen, tmux 등

./script.sh &   # & 사용 (기본적인 백그라운드 실행)
nohup ./script.sh &   # 터미널 종료 후에도 유지됨
setsid ./script.sh    # 독립적인 세션에서 실행

 


 

터미널 종료 이후에도 프로세스 실행을 유지하려면 'nuhup' , '&' 를 함께 사용

nohup ./script.sh &

 

* nohup

  • 'no hang up' 의 약자로 SIGHUP신호를 무시하여 터미널을 종료해도 프로세스가 종료되지 않음.
  • nohup 단독사용 시 포그라운드로 실행.
    => 터미널을 닫아도 프로세스는 계속 실행되지만 사용자가 해당 터미널에서 다른 작업 할 수 없음.
  • nohup.out 파일에 표준출력(stdout), 표준에러(stderr) 저장.

 


 

로그파일 저장

nohup ./script.sh > mylog.log 2>&1 &

> mylog.log  : 표준 출력(stdout)을 mylog.log에 저장.
2>&1 : 표준 에러(stderr)도 같은 파일(mylog.log)에 저장.

 

로그파일 분리 저장

nohup ./script.sh > stdout.log 2> stderr.log &

표준 출력(stdout) → stdout.log에 저장.
표준 에러(stderr) → stderr.log에 저장.

 

표준출력만 저장

nohup ./script.sh > /dev/null 2> error.log &

표준 출력(stdout) → /dev/null (출력 안 함)
표준 에러(stderr) → error.log

 

저장X

nohup ./script.sh > /dev/null 2>&1 &

모든 출력(stdout & stderr) 무시 (로그 남기지 않음).