---
description: (리눅스) 데몬 프로세스
---

# (Linux) Daemon process

> **데몬(Daemon)** 은 리눅스의 백그라운드에서 동작하면서 특정한 서비스를 제공하는 프로세스를 의미한다. 리눅스 시스템에서 동작하는 웹 서버나 데이터베이스 서버, 원격 접속 서버 등 각종 서비스를 제공하는 프로세스들이 바로 데몬이다.

**1. 데몬의 동작 방식**

데몬 혼자 스스로 동작하는 독자형(Standalone)과 데몬을 관리하는 슈퍼데몬에 의해 동작하는 방식이 있다.

독자형의 경우 시스템의 백그라운드에서 항상 동작하는데, 자주 호출되는 데몬이 아니라면 시스템의 자원을 낭비할 우려가 있다.

슈퍼데몬에 의한 동작 방식은 평소에는 슈퍼 데몬만 동작하다가 서비스 요청이 오면 슈퍼데몬이 해당 데몬을 동작시키는 것이다. 따라서 독자형보다는 서비스에 응답하는데 시간이 좀 더 걸릴 수 있지만 자원을 효율적으로 사용한다는 장점이 있다.

독자형이든 슈퍼 데몬에 의해 동작하는 형태든 데몬이 제대로 동작하지 않으면 시스템이 서비스를 제공할 수 없다.

**2. 슈퍼 데몬**

데몬의 종류가 늘어나자 이를 관리하기 위한 슈퍼데몬이 등장했다. 유닉스에서 슈퍼 데몬의 이름은 inetd 였으나 우분투에서는 보안 기능이 포함된 xinetd를 사용하고 있다. 슈퍼 데몬은 네트워크 서비스를 제공하는 데몬만 관리한다. 간단히 말해 사용자가 네트워크 서비스를 요청하면 슈퍼 데몬이 이를 받아서 해당하는 서비스 데몬을 동작시키는 것이다.

**3.데몬의 조상**

init와 커널 스레드 데몬이 바로 대부분의 데몬을 동작시키는 조상격 데몬이다.

**init 데몬**

<figure><img src="https://2804243633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfV6clXG953LqFieNgWUf%2Fuploads%2FotHjtaQ0wIZDc4A6bTqM%2Fimage.png?alt=media&#x26;token=4225c725-0f13-422c-85dd-039d57ecc2a6" alt=""><figcaption></figcaption></figure>

init 데몬은 1번 프로세스이며 프로세스 대부분의 조상 프로세스이다. pstree 명령으로 프로세스들의 실행 구조를 확인해보면 init가 다른 데몬의 조상임을 다 시 한 번 더 명확하게 알 수 있다.

**커널 스레드 데몬**

<figure><img src="https://2804243633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfV6clXG953LqFieNgWUf%2Fuploads%2FFYBm2wQbco0Aro8NbzNI%2Fimage.png?alt=media&#x26;token=41885214-331a-4133-b079-f283948ac788" alt=""><figcaption></figcaption></figure>

커널의 일부분을 프로세스 처럼 관리하는 데몬을 커널 데몬이라고 한다. 이는 ps 명령으로 확인했을 때 대괄호로 둘러싸여 있는 프로세스들이다. 예전에는 대부분 k로 시작했으나, 요즘은 이를 반드시 준수하지 않는다. 커널 데몬은 대부분 입출력이나 메모리 관리, 디스크 동기화 등을 수행하며, 대체로 PID가 낮은 번호로 할당되어 있다. 일반 프로세스의 조상 데몬이 init라면 커널 데몬을 동작시키는 조상 데몬은 커널 스레드 데몬(kthreadd)이다. ps 명령으로 확인해보면 모든 커널 데몬의 PPID가 2번임을 알 수 있다. PID 2번은 kthreadd 데몬이다.
