'리눅스'에 해당되는 글 6건

  1. 2007.08.20 데몬(daemon) 프로세스를 만들어봅시다!
 
데몬이 뭐냐하면 시스템에 관련된 후위 프로세스를 말하는데요. 즉 시스템을 시작하면 시스템에 필요한 프로세스들이 있는데 이것들이 데몬이죠.

telnetd daemon, ftpd daemon, httpd daemon, inetd daemon, squid daemon, sendmail daemon, bind nameserver daemon, routed daemon 뭐 이런 데몬들이 있다는데 어려운건 다 집어치우고, 그냥 쉽게 말해서 계속 메모리에 상주해 있는겁니다. 대신 부모프로세스는 유닉스의 가장 최상단 프로세스인 init프로세스의 ID인 1입니다.

이눔을 죽일 때에는 KILL로 밖에 못죽이는 것이죠.

간단합니다. 그냥 자식 프로세스를 생성하고, 부모를 죽여버리면 돼요-_-;

fork_daemon.c (Language : c)
#include <stdio.h>

int main()
{
        int pid, ppid;
        pid = fork();
        if (pid > 0)
                exit(0);
        printf("%d\n", pid);

        sleep(3);
        while(1){
                printf("daemon!!\n");
                sleep(10);
        }
}

저기서 보면 fork()를 하면 자식 프로세스는 pid를 0을 받습니다. 그리고 부모프로세스는 0보다 큰 값을 가집니다. 그래서 0보다 크면 부모프로세스를 종료시키죠.

종료가 된 뒤에 이 자식프로세스가 유닉스의 최상단 프로세스인 init프로세스의 id인 1을 가져 올 때 까지 기다립니다. 3초간-_-;

그런다음 와일문을 10초마다 daemon!을 출력하도록 시도해봅시다.
그러면 이 프로세스는 백그라운드에서 뜨고 있는 프로세스가 됩니다.

데몬프로세스 실행현황 (Language : text)
[oracle][/home/oracle/mudchobo] fork_daemon
0
[oracle][/home/oracle/mudchobo] daemon!!

[oracle][/home/oracle/mudchobo] daemon!!

[oracle][/home/oracle/mudchobo] ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
oracle   26754 26753  0 09:30 pts/1    00:00:00 -csh
oracle   26944     1  0 09:39 pts/1    00:00:00 fork_daemon
oracle   26947 26754  0 09:39 pts/1    00:00:00 ps -f
[oracle][/home/oracle/mudchobo] daemon!!

저기 보시면 부모프로세스 아이디가 1임을 볼 수 있습니다.
 
Posted by 머드초보
,