nohup 이란?
nohup의 경우 HUP(hanup) 신호를 무시하도록 만드는 리눅스의 POSIX 명령어 입니다.
일반적으로 출력을 별도로 넘겨주지 않으면 nohup.out 이라는 이름의 파일로 출력됩니다.
보통 쉘 스크립트나 프로그램을 실행시킬때 터미널에서 실행시키게 되면 세션이 끊기거나 로그아웃을 할경우 돌아가던 프로그램과 스크립트가 멈추게됩니다.
이런경우 nohup을 사용하면 터미널 세션이 끊기거나 로그아웃을 해도 프로세스가 종료되지않고 지속적으로 실행됩니다.
& 과 다른점은 &은 백그라운드라서 로그아웃을 하면 종료되고 nohup은 그대로 유지됩니다.
- 출력물인 nohup.out 에는 프로그램을 실행시켰을때의 내용, 에러 등등이 남기때문에 디버깅할때 요긴합니다.(다만 계속 덮어쓰기..)
- 만약에 nohup.out의 이름을 바꾸고 싶다면 > output.log 이런식으로 리다이렉션을 변경할 수 있습니다.
- 예를들어서 test.sh 의 일반 로그와 에러로그를 구분하려면 nohup sh .test.sh > output.log 2> error.log < /dev/null 이렇게 사용할 수있습니다.
예제
이전에 만들어본 portscan용 python 스크립트를 기본적으로 돌렸을경우 아래처럼 출력물이 나오게 됩니다.
이걸 nohup을 사용해서 보면 nohup python3 portscan.py
nohup.out 의 내용을 보겠습니다.
종료는 process 번호를 확인해서 kill -9 을 이용하면됩니다.