Daemon
멀티태스킹 운영 체제에서 데몬(daemon, 발음: 데이먼/'deɪmən/ 또는 디먼 /'dimən/[1])은 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다. 시스템 로그를 남기는 syslogd처럼 보통 데몬을 뜻하는 ‘d’를 이름 끝에 달고 있으며, 일반적으로 프로세스로 실행된다.
데몬은 대개 부모 프로세스를 갖지 않으며, 즉 PPID가 0이며, 따라서 프로세스 트리에서 init 바로 아래에 위치한다. 데몬이 되는 방법은 일반적으로 자식 프로세스를 포크(fork)하여 생성하고 자식을 분기한 자신을 죽이면서 init이 고아가 된 자식 프로세스를 자기 밑으로 데려가도록 하는 방식이다. 이러한 방법을 ‘fork off and die’라 부르기도 한다.
시스템은 시동할 때 데몬을 시작하는 경우가 많으며, 이런 데몬들은 네트워크 요청, 하드웨어 동작, 여타 프로그램에 반응하는 기능을 담당하게 된다. 그 밖에도 몇몇 리눅스에 있는 devfsd처럼 하드웨어 설정이나, cron처럼 주기적인 작업을 실행하는 등 기타 다양한 목적으로 사용된다.
About
Richard Stevens의 Unix Network Programming를 인용하여 unix daemon의 조건을 다음과 같이 언급하고 있다.
- 열려있는 모든 File descriptor를 닫는다.
- 현재 작업 디렉토리를 변경한다
- 파일 생성시 마스크를 재설정한다
- 백그라운드로 실행된다
- 프로세스 그룹에서 분리한다
- 터미널의 I/O 시그널을 무시한다
- 제어 터미널과 분리한다
- 다음과 같은 상황을 올바르게 다룰수 있다
- System V init 프로세스에 의해 시작된다.
- SIGTERM 시그널에 의해 종료된다
- 자식 프로세스는 SIGCLD 시그널을 발생시킨다
List of Daemon
데몬명 | 설명 |
Network Manager | 자동으로 최대 사용 가능한 연결에 네트워크 연결을 스위칭 |
acpid | 커널로부터 ACPID 이벤트를 받아서 처리 |
anacron | downtime까지 남겨진cron 작업을 실행 |
apmd | 배터리 상태를 모니터링 및 기록(syslog(8)) |
atd | 백그라운드 작업을 수행하거나 예약 명령을 처리 |
autofs | 서버의 파일을 읽을 때 자동으로 마운트 수행 |
crond | 리눅스에 등록된 명령어를 정기적으로 수행 |
diskdump | 시스템 충돌이나 diskdump 모듈 초기화시 덤프파일 저장 |
echo | echo의 캐릭터 값을 클라이언트로 전송 |
eklogin | Kebelos 5를 이용하여 암오화 시키는 데몬 |
gpm | 텍스트기반의 리눅스 어플리케이션에 마우스 서포트 |
gssftp | Kerberized ftp 서버 케베로스 5를 이용하여 암호화 |
haldeamon | 소스로부터 하드웨어에 대한 정보를 모으고 유지 |
iptables | 리눅스 방화벽 iptables 데몬 |
irqbalance | 프린터 작업 분배 |
idsn | ISDN 서비스 설정 |
klogin | Kebelos 5 인증, dsd타입 rlogin 세션 설정 |
kudzu | 하드웨어 검색 데몬 |
mdmonitor | RAID 모니터링과 관리 담당 |
mdmpd | 다중 경로 디바이스 모니터링과 관리 |
messagebus | 시스템 이벤트나 다른 메시지를 알려주는 역할 |
netdump | netconsol과netcrashdump 요소들을 초기화 |
netfs | NFS, SMB/CIFS, NCP 등을 마운트/언마운트 |
netplugd | Non-static 네트워크 인터페이스 관리 |
network | 부팅시 모드 설정된 네트워크 인터페이스를 활성화 또는 비활성화 |
nfs | tcp에서 파일공유, 리눅스에서 nfs 서버를 운영시 사용 |
nfslock | nfs서버 운용시 다수 사용자들의 접근을 방지할 때 사용 |
NTPD | ntp V4 데몬, 시간 동기화시 사용 |
portmap | RPC 연결관리 데몬(NFS, NIS) |
psacct | 프로세스에 대한 설명을 시작/ 중지시 사용 |
rawdevices | raw 디바이스를 블록 디바이트에 맵핑 |
rpcgssd | 유저레벨 데몬 시작, NFSv4 클라이언트를 위하여 RPCSEC 관리 |
rpcidmapd | 유저레벨 데몬, 유저 uid와 gid값을 매핑 |
rsync | 동기화시 사용되는 데몬 |
saslauthd | 인증된 요청을 핸들링하는 데몬 |
sendmail | 메일서버 데몬 |
smartd | 자가 모니터링과 리포트 기능 |
snmpd | 단순 네트워크 관리 프로토콜 데몬 |
snmptrapd | snmpd trap 데몬 |
sshd | open-ssh 데몬 |
syslog | 로그 데몬 |
time | RFC 868 타임 서버 데몬 |
uncserver | uncserver 설정 |
winbind | SAMBA winbind 데몬 |
xfs | X-window 폰트 데몬 |
xinetd | 슈퍼 데몬 각종 서비스를 관리 |
ypbind | NIS 데몬 |
See also
Favorite site
Programming
- Daemon 만들때 알아둘 점 1
- Windows 서비스를 만드는 방법(Sc.exe사용)
- KLDP - 질문 - 도스창이 뜨지않고 백그라운드로 실행할려면?
- Win32 Service - #2 서비스 생성 ('윈도우즈 API 정복' 참조)
- Win32 API – Windows 서비스 등록, 해제, 시작, 중지
- C++ 서비스 프로그램 제작
References
-
Things_to_know_when_creating_Daemon.pdf ↩