데몬을 제작해야 하는데요..

fairycat의 이미지

흠.. 리눅스 플밍한지 얼마 안되어 개념을 못잡고 헤매네요.
윈도에서 데몬이라고 하면 그냥 따로 프로세스 돌려주는 건데.. 백그라운드로..
리눅스에서도 마찬가지인가요?

지금 하려고 하는 잡은 이렇습니다.
하드햇에서 vtysh이라는 통합 쉘을 사용하는데.. 이 통합 쉘을 관리하는
매니지먼트 데몬을 만들고자 합니다. 이유는 멀티 유저를 지원하기 위함이고요
각 사용자의 로컬에서 vtysh을 통해 입력한 명령은 매니지먼트 데몬에서
알고 있어야 합니다. 그리고 그 명령을 받아 configuration을 적용시켜줘야
하지요. 이 때 서로 경쟁 상태에 놓이는 것을 방지하기 위해 IPC처리가 필요
할 것 같구요. 흠.. 대충 이렇습니다.

일단 데몬이라는 걸 어떻게 짜야 하는건지 샘플을 보고 싶은데 참조할만한
소스가 있을까요? 리눅스상에 돌아가는 데몬들이 많은데 어느 부분이 정작
필요한 부분인지 알기가 쉽지 않군요. 나름대로 분석을 시도해봤지만..ㅠㅠ

경험자분들의 조언 부탁드리겠습니다. 감사합니다. -_- _-_ -_-

Dr_stein의 이미지

새로운 session의 리더가 되고, stdin, stdout이 닫혀있으면
될꺼 같습니다.

앞마당 먹고 시작한 저그의 8할은 뮤탈 테크를 먼저 탄다. 하지만 나머지 2할때문에 항상 스켄이 모자란다. - _-;

shkwon81의 이미지

Unix Network Programming 에 보면 daemon_init() 라는 함수가 나와 있습니다. 이 정도면 충분할 듯 하네요..

#include    "unp.h"
#include    <syslog.h>

#define MAXFD   64

extern int  daemon_proc;    /* defined in error.c */

void
daemon_init(const char *pname, int facility)
{
    int     i;
    pid_t   pid;

    if ( (pid = Fork()) != 0)
        exit(0);            /* parent terminates */

    /* 41st child continues */
    setsid();               /* become session leader */

    Signal(SIGHUP, SIG_IGN);
    if ( (pid = Fork()) != 0)
        exit(0);            /* 1st child terminates */

    /* 42nd child continues */
    daemon_proc = 1;        /* for our err_XXX() functions */

    chdir("/");             /* change working directory */

    umask(0);               /* clear our file mode creation mask */

    for (i = 0; i < MAXFD; i++)
        close(i);

    openlog(pname, LOG_PID, facility);
}
fairycat의 이미지

흠.. 아직 잘 모르겠지만..^^ 해보고 다시 질문 올리겠습니다.
감사합니다. ^^

가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..

- 나루토 <키시모토마사시>

partout의 이미지

daemon이라는 함수가 있습니다.

자세한 것은

man daemon

....

    if (daemon(1, 0) < 0) {
       /* 에러 처리 */
    }

어찌나 졸린지..~~

sangheon의 이미지

partout wrote:
daemon이라는 함수가 있습니다.

자세한 것은

man daemon

....

    if (daemon(1, 0) < 0) {
       /* 에러 처리 */
    }

표준은 아니더군요. 이기종 간의 포팅이 예상되는 프로그램이면 안 쓰는게 좋을 것 같습니다.

데몬 만드는 코드는 널리 알려져 있으니까요.

--

Minimalist Programmer

fx2000의 이미지

저도 많은 도움을 얻은 싸이트인데..

http://www.joinc.co.kr/modules.php?name=News&file=article&sid=24

http://www.joinc.co.kr/modules.php?name=News&file=article&sid=62

여기 보시면...참 명료하게 설명되어 있습니다..

^^~

꾸벅..

세상은 견고하고 삶은 유희가 아니다...

fairycat의 이미지

예전에 올린 글인데 이후에도 답글을 마니 달아주셨네요. 모두들 감사합니다.
특히 마지막에 링크는 정말 유용하군요. 저의 베스트 사이트에 등록되었습니다. ^^

가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..

- 나루토 <키시모토마사시>

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.