프로그래밍 언어/Python

nohup, &, &&에 대한 글

바보1 2023. 5. 3. 23:49

어디에 쓸까 고민하다가 그냥 파이썬 카테고리에 씁니다.

스크립트와 관련된 거라서..

 

해당 글에서는 사용법만 알려드립니다.

명령어가 어떤 의미를 가지는지, 이걸 어떻게 응용할 수 있는지에 대해서는 작성하지 않았습니다.


1. 왜 필요한데?

 

 

  • 리눅스, 유닉스, 맥에서 백그라운드로 작업을 돌리는 경우가 빈번해져서 정리를 해야 할 때가 온 것 같습니다.
  • 정말 간단한 알고리즘은 그냥 보통 Run 버튼을 눌러서 바로 결과가 나오는데 반해, 인공지능과 관련된 프로그램은 하루 이틀로 안 끝나는 경우가 대다수입니다.
  • 최근에 돌린 모델의 경우 3일 하고도 20시간이나 걸렸는데, 이 시간 동안 컴퓨터를 계속 켜고 있는 것은 말이 안 되죠..
  • nohup, & 은 스크립트를 무려 백그라운드로 돌려줍니다.

2. nohup

 

 

  • nohup "no hang up" 줄임말로, 작업을 백그라운드에서 실행시키고 현재 터미널 세션 연결을 끊어도 작업이 계속 실행되도록 보장합니다. 
  • nohup 사용하여 실행한 작업은 로그아웃 후에도 계속해서 실행됩니다. 이는 nohup 작업을 실행할 SIGHUP 시그널을 무시하기 때문입니다. 
  • nohup 명령어를 사용하여 실행한 작업은 출력을 파일에Redirection 하여저장할 있습니다. 이를 통해 작업의 출력을 추적하거나 필요할 검토할 있습니다.
  • 한 번 예시를 봅시다.
%test.py

import time

print('hello world')
time.sleep(5)
print('wake up!')
  • 이런 코드가 있을 때, nohup python test.py를 실행하면 백그라운드로 작업을 돌립니다.
  • 출력은 nohup.out이라는 파일이 생성되어 그곳에서 출력됩니다.
  • 만약 nohup.out이 아닌 다른 곳에 출력하고 싶다면 어떻게 해야 할까요?
nohup python test.py > log.out 2>&1
  • 이런 방식으로 사용합니다. log.out 파일은 기존에 생성되어 있어야 합니다.
  • 만약 출력하고 싶지 않다면
nohup python test.py 1>/dev/null
  • 위의 명령어를 사용하면 됩니다.

3. &

 

 

  • & 또한 명령어가 백그라운드에서 실행하도록 합니다.
  • nohup과 차이점은 터미널에 계속 다른 것을 입력할 수 있다는 점입니다.
  • 단 이는 사용자가 로그아웃을 한다면 프로그램도 함께 종료됩니다.
  • 그렇기 때문에 보통 nohup과 &를 같이 사용합니다.
nohup python test.py &
  • 이렇게 하면 작업이 안정적으로 백그라운드에서 실행됩니다.