티스토리 뷰

데몬 (Daemon)의 어원


데몬은 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다.

 

사용자의 요청을 기다리고 있다가 요청이 발생하면 이에 적절히 대응하는 리스너와 같은 역할을 하고 메모리에 상주하면서 특정 요청이 오면 즉시 대응 할 수 있도록 대기중인 프로세스를 말한다.

 

데몬 단어의 어원

데몬는 악마나 유령을 뜻한다.
유령은 걷지 않고 항상 떠 있기 때문에 백그라운드에서 조용하게 항상 수행되는 프로그램을 데몬 프로그램이라 부른다.

 

내가.. 데몬..?

 

 

데몬은 항상 돌아가고 있어야 하는 웹 서버에 적합하기 때문에 주로 서버에서 사용된다.

 

대표적으로 Apache 웹서버의 httpd가 있으며 이외에도 유닉스(리눅스) 운영체제에서 데몬임을 나타내기 위해 끝에 'd'가 붙는다. (ex. inetd, httpd, nfsd, sshd, named, lpd)

 

유닉스 계열에서는 데몬을 시스템의 기능을 제공하거나 백그라운드에서 항상 실행되는 프로그램으로 뜻하고 다른 운영체제에서는 '시스템 프로세스'라고 불린다.

대부분 시스템과 시작과 끝을 함께한다고 한다. (낭만적이다,,,⭐)

 

따라서 주로 관리자 권한으로 실행되어 네트워크 요청이나 하드웨어 동작 등 여러 기능을 담당하며 다양한 목적으로 사용된다.

 

 

 

데몬 프로세스


데몬의 특징은 부모 프로세스가 없다는 것이다. 따라서 PPID(부모 프로세스 ID)는 1이며 시스템의 첫 프로세스인 init의 바로 하위에 위치하게 된다.

init (PID=1)
├── mongod (PPID=1)
├── sshd (PPID=1)
├── httpd (PPID=1)
├── crond (PPID=1)
└── 기타 다른 데몬들 (모두 PPID=1)

 

엄밀히 말하면 어떤 프로세스의 부모 프로세스가 init(=부모의 ID가 1이며 이를 제어하는 터미널이 없을 때)일 때, 즉 사용자 입력으로 종료시킬 수 없을 때 데몬으로 칭하는데 이들은 부모 프로세스가 종료되면(=터미널이 종료되면) init이 이들을 받아들인다. (=입양한다)

 

데몬은 일반적으로 자식 프로세스를 포크(fork)하여 자기 자신을 복사, 생성한 후 자기 자신은 삭제하여 해당 프로세스를 고아 프로세스로 만든다.

 

이후 이를 init이 자신의 자식 프로세스로 받아들이도록 하는 과정을 통하여 만들어지며 이를 fork off and die라 표현한다.

 

*제어하는 터미널이 없다는 것의 의미?

만약 터미널에서 node 서버를 실행한다고 가정했을 때 일반적인 프로세스의 경우에는 터미널과 연결되어 있어서 종료가 가능하다.

# 터미널에서 node 서버 실행
$ node server.js

# 이 경우 터미널과 연결되어 있어서:
- Ctrl+C로 종료 가능
- 터미널 창을 닫으면 프로세스도 종료

 

 

반면 터미널 제어가 없는 데몬의 경우에는 터미널로 종료가 불가능하며 시스템 명령어(systemctl 등)를 통해 종료시켜야 한다.

 

따라서 위의 경우 백그라운드 실행이 불가능하지만 이 경우는 백그라운드에서 실행이 가능하다.

# MongoDB 데몬 시작
$ sudo systemctl start mongod

# 이 경우:
- Ctrl+C로 종료 불가능
- 터미널 창을 닫아도 계속 실행
- systemctl 명령어로만 제어 가능

 

 

 

Hoxy.. pm2도 데몬?


mongo db를 설치하는 과정에서 데몬이라는 개념을 처음 접하고 글로 정리해봤는데, 생각해보니 express.js 서버 운영 시 사용했던 pm2도 데몬일 것 같다는 생각이 들었다.

 

그래서 pm2 관련해서 잘 정리된 글을 읽다보니 아래 명령어로 애플리케이션을 실행할 때 데몬화(daemonize)가 이루어졌던 것을 알게됨..

$ pm2 start app.js

[PM2] Spawning PM2 daemon with pm2_home=/Users/gentlejo/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /Users/gentlejo/Projects/maso/app.js in fork_mode (1 instance)
[PM2] Done.

 

하나의 개념을 이해하는 건 단순히 새로운 지식을 얻는 것을 넘어서, 기존에 알고 있던 개념들을 더 깊게 이해하게 되는 계기가 되는 것 같다 ✏️

 

 

 

추가 정리


- 운영 체제의 종류

 

운영체제는 공급되는 시장에 따라 보통 임베디드, 서버, 모바일, 데스크탑 4개의 시장으로 나뉜다.

 

- 멀티태스킹 운영체제

여러 프로그램이 동시에 실행될 수 있는 운영체제를 말한다. 우리가 흔히 사용하는 Windows, Linux, macOS가 대표적인 멀티태스킹 운영체제이다.

 

데몬이 백그라운드에서 동작할 수 있는 것은 멀티태스킹 운영체제이기 때문이다. 단일 태스킹 운영체제였다면 백그라운드 실행이라는 개념 자체가 불가능했을 것이다.

 

- init 프로세스

시스템 부팅 과정의 마지막에 수행되어 커널 부팅이 끝나면 운영체제가 하드웨어의 모든 기능을 제어하게 되었을 때 커널에 의해 생성 및 실행되는 첫 번째 프로세스(pid=1)이다.

 

- PID와 PPID

  • PID: PID(Process Identifier, 프로세스 식별자)는 운영체제에서 프로세스 각각을 구분하기 위해 부여하는 값이다.
  • PPID: PPID(Parent Process Identifier, 부모 프로세스 식별자)는 프로세스를 생성한 부모 프로세스의 PID를 나타낸다.

쉘 프롬프트에서 프로세스를 생성한 경우 쉘이 부모 프로세스가 되고 생성된 프로세스는 자식 프로세스가 되어서 쉘의 PID를 PPID로 갖는다.

 

 

 

참고

https://haruhiism.tistory.com/9

https://inpa.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8D%B0%EB%AA%AC-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%A0%95%EB%A6%AC

https://btcd.tistory.com/100

https://engineering.linecorp.com/ko/blog/pm2-nodejs#PM2%EB%A5%BC%ED%99%9C%EC%9A%A9%ED%95%9CNode.js%EB%AC%B4%EC%A4%91%EB%8B%A8%EC%84%9C%EB%B9%84%EC%8A%A4%ED%95%98%EA%B8%B0-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%9A%B4%EC%98%81%ED%95%98%EA%B8%B0

'CS > 운영체제' 카테고리의 다른 글

[운영체제] 운영체제  (0) 2025.01.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함