Daemon과 Background의 차이는?!

maidland의 이미지

하나의 프로그램을 데몬으로 개발해서 돌릴때와.. root로 로그인해서 백그라운드로

깔고 로그아웃 시켰을때랑 머가 다르죠?

예를들면 IDS를 예로 들어보겠습니다..

보통 IDS처럼 데몬으로 돌릴경우와 부팅시 자동으로 처리되게 해서 백그라운드로

까는경우.. 다른작업 하면 서도 침입탐지 시스템은 계속 구동되고 있는것일테죠...

이 두가지의 차이점.. 무엇일까요? :wink:

서지훈의 이미지

이건 parent process가 누구냐의 문제이죠...
daemon의 경우엔 ppid = 1
background의 경우엔 ppid = current shell id 가 됩니다.
이러한 경우...
daemon은 강제로 죽이는 경우 외엔 죽지 않습니다.
그러나 background로 돌고 있는 process는 shell을 닫게 되면은...
같이 종료가 됩니다.
이건 parent process가 terminate 되기 때문입니다.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

maidland의 이미지

그런 차이점이 였군요..

그렇다면.. fork()함수를 사용해 순차적인 프로그램의 첫부분을 프로세서로 올리면..

그러니까.. IDS로 치자면 패킷캡쳐 부분을 프로세서로 올리면...

데몬으로 돌릴때와 같이 ppid가 1이 되니깐.. 쉘을 종료한다고 해도...

이것은 남아 있겠죠...

A함수를 올리면 이것이 부모가 되고, B,C,D라는 함수들이 자식이 되는거죠...

fork()함수에 대한 정확한 지식이 없는 관계로 이런 생각을 하여 질문을 해봅니다..

>> http://ragnarok.co.kr <<

라그온+ㅁ+ 댄서는 아직 죽지 않았다!!
=-=-=-=-=-=-=-=-=-=-=-

mastercho의 이미지

nohup 으로 돌리는건 백 그라운드로 돌리는건가요? 데몬으로 돌리는건가요?

보니까 데몬으로 돌아가는 느낌인데......

승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스

voidns의 이미지

-D 옵션과 프로그램 자체를 데몬으로 작성하는 것에 차이가 있나요?

차이가 있다면 어떤 차이가 있는 걸까요?

saxboy의 이미지

Stevens 아저씨의 그 유명한 책을 보면 daemonize 시키는 함수가 있습니다. 이 녀석이 어떤 일을 하는지 코드를 보신다면 한눈에 아하... 하실것 같은데요.

지금 어디서 긁어다가 붙이려고 하니 찾질 못하겠네요. 찾으시는 분이 좀 여기에 붙여주시면 감사하겠습니다. :)

arimae의 이미지

Advacned Programming in the Unix Environment 책 418p 나와있습니다.

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "ourhdr.h"

int
daemon_init(void)
{
	pid_t pid;

	if ( (pid = fork()) < 0)
		return (-1);
	else if (pid != 0)
		exit(0);	/* parent goes bye-bye */

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

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

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

	return (0);
}

헤더 부분에서 ourhdr.h 는 Stevens 씨가 제작한 헤더입니다.

417 page를 보면 위의 과정에 대한 설명과 왜 그렇게 하는지에 대한 설명이 나와있습니다.

Dream, Passion and Challenge..

서지훈의 이미지

nohup도 background로 돌아가게 됩니다.
그리고 nohup이 해주는 일은 특정 프로세스에게 SIGHUP signal을 무시하게하고... priority를 5상승 시켜주는 역활을 하게 됩니다.
그리고 SIGHUP은 session leader(SID와 PID가 같은 놈)가 종료를 하게 되면은 이 signal을 받게 되는데...
이 signal을 받으면 종료를 하게됩니다.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

서지훈의 이미지

ranger867 wrote:
-D 옵션과 프로그램 자체를 데몬으로 작성하는 것에 차이가 있나요?

차이가 있다면 어떤 차이가 있는 걸까요?


-D는 단지 option일 뿐입니다.
daemon으로 돌리는...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

ixevexi의 이미지

서지훈 wrote:
이건 parent process가 누구냐의 문제이죠...
daemon의 경우엔 ppid = 1
background의 경우엔 ppid = current shell id 가 됩니다.
이러한 경우...
daemon은 강제로 죽이는 경우 외엔 죽지 않습니다.
그러나 background로 돌고 있는 process는 shell을 닫게 되면은...
같이 종료가 됩니다.
이건 parent process가 terminate 되기 때문입니다.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

오래된 쓰레드를 끄집어 내서 -_- 상당히 부담스러운데

지금 궁금한 점이 생겨서 이 쓰레드를 끌어 올립니다.
제가 확인한 바로는 스티븐스 아저씨 曰

1. 쉘이 command가 끝난것으로 생각하게 한다.
2. 새로운 프로세스 그룹의 리더가 된다.
-> setsid..

이렇게 두가지가 이루어 진다는건데..
이 두가지를 통해서 무엇을 이루고자 하는지 잘 모르겠습니다.

또한 인용된 글처럼 부모가 죽는다고 해서 백그라운드 프로세서가 죽는거 같아 보이진 않는 거 같습니다.

C++, 그리고 C++....
죽어도 C++

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.