자유 그리고 경험

[Linux] 리눅스, 종료되지 않게 프로그램 실행 (Nohup) 본문

기술

[Linux] 리눅스, 종료되지 않게 프로그램 실행 (Nohup)

배아줄기세포 2022. 5. 27. 17:33
반응형

nohup

No hang up의 약자다. hang up(연결을 끊다.)을 하지 말도록 하는 명령어. 보통 세션에 접속했다가 로그아웃 할 때 HUP라는 신호가 발생해 세션에서 실행한 프로그램들도 종료되는데, 그 신호를 무시해준다.

대부분의 운영체제에서 통용하기로 약속한 POSIX 명령어라고 한다.

$nohup 프로그램이름

다음과 같이 실행하면 세션 종료 이후에도 종료되지 않게 해준다. 나느 파이썬 프로그램을 서버처럼 종료시키지 않고 돌리기 위해 다음과 같이 실행한다.

$nohup python 파일.py

원래 파이썬을 실행하는 명령어 앞에 nohup만 붙인 것이다.

이 때 실행하는 프로그램의 권한은 755 퍼미션이여야 한다.

 

로그

프로그램 안에서 찍은 log 기록은 자동으로 nohup.out이라는 파일에 기록된다. 로그 기록이 필요 없는 사람은 다음과 같이 쓰면 된다.

$nohup 프로그램이름 > /dev/null

>  는 표준출력을 '파일'로 저장시키는 Redirection(재지향) 명령어이다.

/dev/null 은 저장시 아무것도 남지 않는 리눅스의 '휴지통' 파일이다.

즉 표준출력을 고대로 쓰레기통에 넣겠다는 말이다.

 

백그라운드 실행

마지막에 '&' 연산자를 쓰면 앞의 명령어를 백그라운드에서 돌게 할 수 있다. 따라서 위의 파이썬을 로그아웃 해도 종료되지 않고, 백그라운드에서 돌아가게 하려면 아래와 같이 실행하면 된다.

$nohup python 파일.py &

백그라운드 종료하고 싶을 때

$ps -ef | grep 프로세스이름  //프로세스 ID를 알아냄
$kill -9 프로세스ID

백그라운드 프로세스 종료
백그라운드 프로세스 ID 확인 후 종료

요즘의 '&' 연산자

요즘은 '&' 연산자에 nohup 기능이 기본옵션으로 있다고 한다. 그래서 굳이 nohup을 안 쓰는 경우도 많은데, 가장 안전빵은 nohup을 같이 써주는것이 좋다. 자꾸 써봐야 안 까먹기도 하니까!

 

내 컴퓨터 환경에 '&'에 nohup기능이 포함되어 있는지 아닌지 보는 명령어는 다음과 같다.

$ shopt | grep huponexit

결과가 hupoexit  off 로 나온다면,  nohup기능이 같이 붙어 있는 겁니다.

설정이름만 봐도  나갈때(on exit)  행업(hup) 하기 설정이네요.  이게 꺼져야 로그아웃해도 안 꺼지겠죠?

 

반응형
Comments