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 &
'컴퓨터 & 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 |
댓글