본문 바로가기

linux

Linux nohup 명령어

nohup

터미널 세션이 끊겨도 계속 실행 할수 있게 해주는 명령어

일반적으로 터미널로 서버를 열었을때 해당 터미널을 종료시키면 서버도 같이 종료하게 된다.
보통 & 옵션과 같이 써서 백그라운드로 실행한다.

 

ex ) 데이터베이스 연결을 nohup 과 & 옵션으로 백그라운드 실행 한후 다른 작업을 할때

// 백그라운드 실행
nohup [database connection scripts] &

// 해당 프로세스 확인
ps -ef | grep [이름]

// 연결 끊기
kill -9 [Process ID]

 

노드 서버로 예를 들어보자

기존 npm run start 로 서버를 열던걸 nohup 과 & 으로 백그라운드 실행을 하게되면
위와 같이 ProcessID 가 4680 인 프로세스 1개가 실행되었다고 나온다.
백그라운드로 실행되니 서버를 여는 기존 로그들은 해당 디렉토리안에 nohup.out 에 기록된다.

 

현재 쉘에서 PID 가 4680 인 프로세스를 가져와보면 위처럼 한개가 나온다.
하지만 중요한건 우리는 저 실제로 돌아가는 node 의 프로세스 ID 가 아니다.
명령어 실행한걸 nohup & 으로 가지고 있는거지 실제로 실행되고 있는 프로그램은 저게 아니다
따라서 kill -9 프로세스ID 를 실행한다고 해도 서버는 계속 열려 있을 것이다

 

 

해당 프로세스를 kill 했지만 아래와 같이 서버는 새로고침을 해도 소켓이 연결되어 있다.

 

npm run start 로 실행된 PPID 가 4680 인 프로세스를 종료해줘야 제대로 지워지게 되는데 PGID 를 지워주게되면 해당 명령어에 관련된 프로세스 그룹 아이디를 지워주게 되므로 제일 깔끔하다.

왼쪽 아래에 보면 소켓이 끊어진걸 볼수 있다.
이상 nohup 에 대해 간단히 알아봤다.

'linux' 카테고리의 다른 글