본문 바로가기
Linux

Linux - 백그라운드 실행 nohup 과 & 이해, Python 사용법

by 올엠 2024. 2. 17.
반응형

Python이나 Linux에서 작업을 한참 하다보면, 기본적으로 세션을 유지하는 Windows와 다르게 세션 로그아웃이 일반적인 Linux에서는  nohup 실행이 필요한 시점을 많이 느끼게 된다.

그럼 간단하게 nohup 과 & 의 차이 그리고 사용법에 대해 정리해 보자.

nohup 과 & 의 차이 

먼저 운영체제 동작 원리를 간단히 설명해보면, 모든 운영체제는 기본적으로 세션에서 프로세스들이 실행하게 된다.

이때 세션이 로그아웃 된다면, 해당 세션에서 동작하는 프로세스들도 함께 종료하도록 되어 있다.

서비스를 하다보면, 장시간 실행이 필요한 프로세스들이 필요했고 운영체제 이러한 프로세스들을 사용자 세션이 아닌 백그라운드라는 별도의 사용공간을 제공(대표적으로 서비스들이 이 공간에서 실행된다)하는데 nohup과 &가 여기에서 차기가 난다.

nohup은 실행을 현재 사용자 세션이 아닌 운영체제가 제공하는 백그라운드 공간에서 실행을 한다.

&사용자 세션에서 실행되며, 화면 출력만 백그라운드로 전환한 상태이다. 즉 &로 실행된 프로세스는 사용자 세션이 로그아웃되는 시점에 같이 종료되어지는 것이다. &의 용도는 주로 현재 로그인한 세션에서 입력을 계속 사용해야하는데 실행 프로그램의 출력 때문에 쉘 사용을 할 수 없을 때 사용하게 된다.

따라서 안전하게 프로세스를 실행하기 위해서는 nohup을 이용하는 것이 좋다.

nohup은  No Hang Ups의 약자로 백그라운드로 지속적으로 실행하는 프로세스를 의미한다.

nohup 사용법

nohup의 사용법은 간단하다.

nohup 이후 실행하고자 하는 프로세스나 스크립트를 적어주면 된다.

nohup filename.sh

이 경우 출력 내용은 기본적으로 현재 실행한 위치에 nohup.out 으로 생성된다.

nohup.out 파일은 tail -f nohup.out을 통해 실행중인 프로세스의 출력 상태를 확인할 수 있다.

tail -f nohup.out

만약 필요한 경우 오른쪽 꺽쇠를 이용하여 출력 내용을 변경해 줄 수 있다.

nohup filename.sh > filename.out

출력 내용이 필요하지 않은 경우 /dev/null 로 지정하여 사용할 수 있다.

nohup filename.sh > /dev/null

& 사용법

&는 현재 실행하는 명령 맨 마지막에 붙여주면 출력을 백그라운드로 전환하게 된다.

./filename.sh > /dev/null &

nohup에서 붙이는 것도 가능하다.

nohup filename.sh > /dev/null &

실행 프로세스 확인

백그라운드 실행의 경우 실행중인 내용은 프로세스 상태를 통해서만 확인이 가능하다.

ps -ef | grep filename.sh

Python

Python의 경우에도 nohup을 이용하여 실행할 수 있다.

다만 Python이 다시 특정 스크립트를 실행하는 방식이기 때문에 출력 내용를 백그라운드로 보내야 하므로, 마지막에 &를 붙여 출력 내용까지 백그라운드로 실행하여야 정상적으로 실행이 가능하다.

nohup python3 filename.py &

추가적으로 nohup.out 을 통해 실행 내용을 확인할 수 있는데, nohup.out은 파일을 기록할 때 Python에서 출력을 바로 업데이트하지 않고 버퍼에 기록하였다가 업데이트하기 때문에 출력내용이 바로 기록되지 않는다.

이를 Python에서도 인지하여 python을 실행할 때 출력내용을 바로 업데이트할 수 있도록 -u 인자를 제공한다.

nohup python3 -u filename.py &

 

 

반응형