본문 바로가기
컴퓨터 & IT (Computer & IT)/Linux

[Linux] 터미널이 종료 후 프로그램 계속 실행시키기 (&, &&, nohup)

by Physics 2021. 5. 6.
728x90

Linux의 터미널에서 실행되고 있는 프로그램들은 터미널이 종료가 되면 같이 종료가 되는 경우가 있다. 이런 경우, 아래와 같은 방법을 이용하면, 터미널을 종료시키더라도 프로세스가 계속 실행이 되도록 할 수 있다. 

• 방법 1 : & + disown 명령어 조합 
   - 작업 중인 프로세스를 백그라운드로 돌린 후, disown 명령어를 사용함으로써 터미널의 작업 리스트에 해당 프로세스를 제거한다. 
   - disown: 작업의 소유권을 이전 
• 방법 2: nohup <command> & 

우선, 설명하기 앞서 기본적으로 알아야 할 내용들이 있다; &, &&, ;의 차이점 [1]

command description
; - 프로세스의 성공여부와 상관없이 다음 명령어 실행 
- 한 줄에 여러 명령어를 순서대로 배열할 때, ;를 구분자로 사용함 
- 프로세스들의 실행 성공/실패 여부와 무관하게 연속적으로 사용할 경우, ";"를 사용 
&& - 이전 명령어가 성공한 경우에 다음 명령어를 실행
& - 프로세스를 실행할 때, 백그라운드에서 동작하도록 만드는 명령어

1. nohup 명령어

• nohup은 "no hangups"라는 의미로 리눅스, 유닉스 계열의 OS에서 쉘 스크립트 파일(*.sh)를 데몬 형태로 실행시키는 프로그램 
• 터미널 세션이 끊겨도 실행을 멈추지 않고 동작하도록 함*
• 별도의 옵션을 설정하지 않았다면,  mohup으로 프로그램을 실행 시 출력되는 메시지들을 nohup.out이라는 파일에 저장한다. 
※ NOTE: nohup으로 실행할 쉘 스크립트의 퍼미션 상태는 755 이상이어야 한다. 

* 리눅스는 기본적으로 터미널에서 세션 로그아웃이 발생하면, 해당 터미널에서 실행한 프로세스들에게 "HUP signal"을 전달하여 종료시킨다. nohup 명령어는 이러한 HUP signal을 무시하도록 하는 명령어이기 때문에 터미널이 종료가 되어도 프로세스들이 계속 실행될 수 있다. 

 

2. nohup과 &의 차이점

- 터미널이 종료된 후에도 프로그램이 종료되느냐 아니냐
  • &(백그라운드): 백그라운드로 동작하므로 터미널이 끊기면 &로 실행하는 프로세스도 같이 종료됨
  • nohup:  nohup으로 프로그램을 실행시키면 터미널이 종료되어도 프로그램이 종료가 되지 않음 


3. nohup 명령어 사용방법

1) 기본적인 사용방법

$nohup [Process or shell script] &

  (1) [Process or shell script] : nohup으로 실행할 프로그램이나 쉘 스크립트를 기입
  (2) &: nohup으로 실행한 파일을 백그라운드로 돌림

2) 표준 출력과 표준 에러를 따로 저장할 경우

$nohup [Process or shell script] 1 > "stdout" 2 > "stderr" &

  (1) [Process or shell script] : nohup으로 실행할 프로그램이나 쉘 스크립트를 기입 
  (2) 1 > "stdout" : 프로세스에 의해 생성되는 표준 출력을 "stdout" 이라는 파일에 리다이렉션 함 
  (3) 2 > "stderr" : 프로세스에 의해 생성되는 표준 에러를 "stderr" 이라는 파일에 리다이렉션 함 

3) 로그 파일을 남기지 않을 경우 

$ nohup [Process or Shell script] 1> /dev/null 2> &1 &

 

 

 

728x90

'컴퓨터 & IT (Computer & IT) > Linux' 카테고리의 다른 글

[Linux] 런레벨 확인 및 변경  (0) 2021.06.12
[Linux] awk 사용법  (0) 2021.06.12
[Linux] screen 명령어  (0) 2021.04.27
[Linux] GPU 모니터링  (0) 2021.04.27
[Linux] sed 편집기  (0) 2021.03.29

댓글