본문 바로가기
리눅스

(번역) daemon (computing)

by 다움위키 2025. 2. 1.

원문 보기: https://dawoum.duckdns.org/wiki/Daemon_(computing)

 

Original article: w:Daemon (computing)

멀티태스킹 컴퓨터 운영 시스템에서, 데몬 (/ˈdmən/ 또는 /ˈdmən/)은 대화형 사용자의 직접 제어를 받는 것이 아니라 백그라운드 프로세스로 실행하는 컴퓨터 프로그램입니다. 전통적으로, 데몬의 프로세스 이름은 프로세스가 실제로 데몬임을 명확히 하기 위해, 그리고 데몬과 정규 컴퓨터 프로그램을 구별하기 위해 d로 끝납니다. 예를 들어, syslogd는 시스템 로깅 기능을 구현하는 데몬이고, sshd는 들어오는 SSH 연결을 제공하는 데몬입니다.

유닉스 환경에서, 데몬의 부모 프로세스는 종종 init 프로세스이지만 항상 그런 것은 아닙니다. 데몬은 보통 프로세스에 의해 자식 프로세스를 포크하고 그런-다음 즉시 종료하며, 따라서 init이 자식 프로세스를 채택하거나, init 프로세스가 데몬을 직접 실행함으로써 생성됩니다. 게다가, 포크하고 종료함으로써 실행된 데몬은 전형적으로 프로세스를 임의의 제어 터미널 (tty)에서 분리하는 것과 같은 다른 작업을 수행해야 합니다. 그러한 절차는 종종 유닉스에서 daemon(3)과 같은 다양한 편의 루틴에서 구현됩니다.

시스템은 종종 네트워크 요청, 하드웨어 활동, 또는 다른 프로그램에 응답하여 일부 작업을 수행함으로써 부팅 시간에 데몬을 시작합니다. 크론과 같은 데몬은 예약된 시간에 정의된 작업을 수행할 수도 있습니다.

Terminology

그 용어는 MIT의 Project MAC에서 프로그래머들에 의해 만들어졌습니다. 1963년경 Project MAC에서 일했던 Fernando J. Corbató에 따르면, 그의 팀은 물리학과 열역학에서 분자를 분류하는 데 도움이 되는 가상의 에이전트인 맥스웰의 악마(Maxwell's demon)에 의해 영감을 받아 데몬이라는 용어를 처음 사용했으며, "우리는 시스템 작업을 수행하기 위해 끊임없이 일하는 백그라운드 프로세스를 설명하기 위해 데몬이라는 단어를 환상적으로 사용하기 시작했습니다"라고 말했습니다. 유닉스 시스템은 이 용어를 계승했습니다. 맥스웰의 악마는 데몬을 백그라운드에서 일하는 초자연적 존재로 해석한 그리스 신화와 일치합니다.

일반적인 의미에서, 데몬은 그리스어 δαίμων에서 유래한 "데몬"이라는 단어의 오래된 형태입니다. Unix System Administration Handbook에서, Evi Nemeth는 데몬에 대해 다음과 같이 언급합니다:

많은 사람들이 "daemon"이라는 단어를 "demon"와 동일시하는데, 이는 UNIX와 지하 세계 사이에 어떤 종류의 사탄적 연결이 있다는 것을 의미합니다. 이는 엄청난 오해입니다. "Daemon"은 사실 "demon"의 훨씬 오래된 형태입니다; 데몬은 선이나 악에 대한 특별한 편견이 없지만, 오히려 사람의 성격이나 개성을 정의하는 데 도움이 됩니다. 고대 그리스인의 "개인적 데몬" 개념은 현대의 "수호 천사" 개념과 유사했습니다—"행복감(eudaemonia)"은 친절한 영혼의 도움을 받거나 보호받는 상태입니다. 원칙적으로, 유닉스 시스템은 데몬과 악마가 모두 들끓는 듯합니다.

신화적 상징주의의 또 다른 특징은 데몬이 보이지 않지만 항상 존재하고 자신의 의지를 행사한다는 것입니다. 플라톤에게 기인한 Theages에서, 소크라테스는 자신의 개인적 데몬을 현대적 도덕적 양심 개념과 비슷한 것으로 묘사합니다. "신들의 은총은 나에게 놀라운 선물을 주었고, 그것은 어린 시절 이후로 나를 떠나지 않았습니다. 그것은 들릴 때 내가 하려는 일을 막고 결코 나를 재촉하지 않는 목소리입니다."

현대 컴퓨터 소프트웨어 맥락에서, daemon이라는 단어는 /ˈdmən/ DEE-mən 또는 /ˈdmən/ DAY-mən으로 발음됩니다.

daemon에 대한 대안적인 용어는 service (Windows, Windows NT 이상, 및 나중에는 Linux에서도 사용됨), started task (IBM z/OS), 및 host job (XDS UTS)입니다. 때때로 보다 일반적인 용어 server 또는 server process가 사용되며, 특히 클라이언트-서버 시스템의 일부로 작동하는 데몬의 경우 더욱 그렇습니다.

그 용어가 컴퓨터 사용에 채택된 후, 그것은 Disk And Execution MONitor의 역어(backronym)로 합리화되었습니다.

컴퓨터 네트워크에 연결하는 데몬은 네트워크 서비스의 예입니다.

Implementations

Unix-like systems

엄격하게 기술적인 의미에서, 유닉스-계열 시스템 프로세스는 부모 프로세스가 종료되고 데몬이 init 프로세스 (프로세스 번호 1)를 부모 프로세스로 지정받고 제어 터미널을 가지지 않을 때 데몬입니다. 어쨌든, 더 일반적으로, 데몬은 init 프로세스의 자식이든 아니든 임의의 백그라운드 프로세스일 수 있습니다.

유닉스-계열 시스템에서, 프로세스가 명령줄이나 init 스크립트 또는 SystemStarter 스크립트와 같은 시작 스크립트에서 시작될 때 프로세스가 데몬이 되는 공통적인 방법은 다음과 같습니다:

  • 선택적으로 환경에서 불필요한 변수를 제거합니다.
  • 포크종료 (포크의 부모 "half"에서)를 통해 백그라운드 작업으로 실행합니다. 이를 통해 데몬의 부모 (쉘 또는 시작 프로세스)가 종료 알림을 받고 정상적인 실행을 계속할 수 있습니다.
  • 보통 단일 작업, setsid()에 의해 호출 세션에서 분리합니다:
    • 제어하는 tty에서 분리합니다.
    • 새로운 세션을 생성하고 해당 세션의 세션 리더가 됩니다.
    • 프로세스 그룹 리더가 됩니다.
  • 데몬이 실수로라도 새로운 제어 tty를 획득하지 않도록 보증하기를 원하면 (제어 tty 없이 세션 리더가 빈 tty를 열 때 발생), 그것은 다시 포크하고 종료할 수 있습니다. 이것은 새로운 세션에서 더 이상 세션 리더가 아니고, 제어 tty를 획득할 수 없습니다.
  • 마운트된 파일 시스템에 있는 임의의 디렉토리를 프로세스가 사용 중이 아닌 상태로 유지하도록 (마운트 해제할 수 있도록) 루트 디렉토리 (/)를 현재 작업 디렉토리로 설정합니다.
  • open(), creat(), 및 기타 운영 시스템 호출에 자체 권한 마스크를 제공하기 위해 허용하고 호출자의 umask에 의존하지 않도록 umask를 0으로 변경합니다.
  • 표준 스트림 (stdin, stdout, 및 stderr)에 대해 파일 기술자 0, 1, 및 2를 /dev/null 또는 로그-파일로 리다이렉션하고, 부모 프로세스에서 상속받은 다른 모든 파일 기술자를 닫습니다.

프로세스가 inetd, launchd, 또는 systemd와 같은 수퍼-서버 데몬에 의해 시작되면 수퍼-서버 데몬은 프로세스에 대해 해당 기능을 수행하며, 단, systemd에서 실행되도록 변환되지 않고 Type=forking으로 지정된 기존-스타일 데몬과 inetd 아래의 "멀티-스레드" 데이터그램 서버는 예외입니다.

MS-DOS

Microsoft DOS 환경에서, 데몬-같은 프로그램은 종료-및-상주 프로그램 (TSR)으로 구현되었습니다.

Windows NT

Microsoft Windows NT 시스템에서, Windows 서비스라고 하는 프로그램은 데몬의 기능을 수행합니다. 그것들은 프로세스로 실행되며, 보통 모니터, 키보드, 및 마우스와 상호 작용하지 않고, 부팅 시 운영 시스템에서 시작될 수 있습니다. Windows 2000 이상 버전에서, Windows 서비스가 제어판, 전용 제어/구성 프로그램, 서비스 제어 관리자의 서비스 제어기 구성 요소 (sc 명령), net startnet stop 명령 또는 PowerShell 스크립팅 시스템을 사용하여 구성되고 수동으로 시작 및 중지됩니다.

어쨌든, 임의의 Windows 응용 프로그램은 서비스뿐만 아니라 데몬의 역할을 수행할 수 있고, 일부 Windows 데몬은 일반 프로세스로 실행하는 옵션이 있습니다.

Classic Mac OS and macOS

Classic Mac OS에서, 옵션 기능과 서비스는 운영 시스템을 패치한 시작 시 로드된 파일에 의해 제공되었습니다; 이것들은 시스템 확장 및 제어판으로 알려졌습니다. 이후 버전의 classic Mac OS는 이것들을 완전한 얼굴-없는 백그라운드 응용 프로그램으로 보강했습니다: 백그라운드에서 실행되는 정규 응용 프로그램입니다. 사용자에게, 이것들이 여전히 정규 시스템 확장으로 설명되었습니다.

Unix 시스템인 macOS는 데몬을 사용하지만 Windows에서처럼 데몬에 대해 해당 용어를 사용하지 않고, 서비스 메뉴에서 선택된 기능을 수행하는 소프트웨어를 지칭하기 위해 "서비스"라는 용어를 사용합니다.