본문으로 건너뛰기

nohup와&그리고alias

nohup 과 & 의 차이
먼저 운영체제 동작 원리를 간단히 설명해보면, 모든 운영체제는 기본적으로 세션에서 프로세스들이 실행하게 된다.
이때 세션이 로그아웃 된다면, 해당 세션에서 동작하는 프로세스들도 함께 종료하도록 되어 있다.
서비스를 하다보면, 장시간 실행이 필요한 프로세스들이 필요했고
운영체제 이러한 프로세스들을 사용자 세션이 아닌 백그라운드라는 별도의 사용공간을 제공(대표적으로 서비스들이 이 공간에서 실행된다)하는데
nohup과 &가 여기에서 차기가 난다.

nohup은 실행을 현재 사용자 세션이 아닌 운영체제가 제공하는 백그라운드 공간에서 실행을 한다.
{{< color red "&는 사용자 세션에서 실행되며, 화면 출력만 백그라운드로 전환한 상태" >}} 이다.
즉 &로 실행된 프로세스는 사용자 세션이 로그아웃되는 시점에 같이 종료되어지는 것이다.
&의 용도는 주로 현재 로그인한 세션에서 입력을 계속 사용해야하는데 실행 프로그램의 출력 때문에 쉘 사용을 할 수 없을 때 사용하게 된다.
따라서 안전하게 프로세스를 실행하기 위해서는 nohup을 이용하는 것이 좋다.

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

nohup 사용법

nohup의 사용법은 간단하다.
nohup 이후 실행하고자 하는 프로세스나 스크립트를 적어주면 된다.

nohup filename.sh

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

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

tail -f nohup.out

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

nohup filename.sh > custom_filename.out

& 사용법

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

./filename.sh > /dev/null &

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

nohup filename.sh > /dev/null &

실행 프로세스 확인

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

ps -ef | grep filename.sh

pgrep을 이용해서 pid를 보려고 한다면.

pgrep 실행프로그램명

nohup으로 alias실행 안되는것 해결법

나의 경우는 휴고블로그를 편하게 사용하기 위해 이렇게 별칭 사용을 하고있다.

vi ~/.bashrc
alias hs='hugo server --bind 0.0.0.0 --themesDir ../..'

그런데 nohup랑 물려서 사용하려 해보니 안되더라

nohup hs > /dev/null &

그래서 찾아봤다....

nohup hs 를 하게되면
hs는 nohup에 의한 자식 프로세서 로써 동작하는데
쉘 에서는 별칭을 자식 프로세서로써 적용하지 않는다
그러므로 절대경로가 정확하지 않은 커맨드에 대해서는 nohup입장에서 hs 란 무엇입니까? 가 되는 것이다.

그럼 이것을 어떻게 해결해야 하는가????
{{< color red "nohup용 alias를 따로 등록해서 사용한다" >}} 이다

이런식으로 말이다

alias nhs='nohup hugo server --bind 0.0.0.0 --themesDir ../.. > /dev/null &'