2013-06-13 3 views
0

소켓을 통한 연결을 기다리는 무한 루프를 실행하는 C 프로그램을 성공적으로 만들었습니다. 데몬으로 만들고 시작하고 중지 할 수 있습니다. 내가 어떻게 해? 백그라운드에서 코드를 실행하려면 어떻게해야합니까? 데몬이되기 위해 필요한C의 데몬 소켓 서버

+1

'APUE, Stevens and Rago, 13 장, 데몬 프로세스'를 읽으십시오. – mohit

+0

어떤 OS가 실행되고 있습니까? – syler

답변

2

고전 작업은 다음과 같습니다

  1. 변경 루트에 작업 디렉토리, 그래서 다른 마운트를 고정하지 않는 데몬;
  2. fork()으로 전화를 걸어 부모 프로세스를 종료해야 프로세스가 프로세스 그룹 리더가되지 않습니다.
  3. 표준 입력, 표준 출력 및 표준 오류를 /dev/null으로 리디렉션합니다.
  4. 제어 터미널이없는 새 세션의 세션 그룹 리더로 프로세스를 호출하려면 setsid()으로 전화하십시오. 오류 검사없이

: Linux에서

chdir("/); 

if (fork() > 0) 
    _exit(); 

close(0); 
close(1); 
close(2); 
open("/dev/null", O_RDWR); 
dup(0); 
dup(0); 

setsid(); 

는 glibc는 다음 작업을 할 수있는 daemon() 도우미 기능을 제공합니다.

+0

데몬()은 이식성이 없어도 비 -Linux 시스템에도 존재합니다. –

+0

이 응답은 SIGHUP을 무시하지 않고 setsid를 호출하여 상위 세션이 _exit (2)에 대한 그룹 리더의 호출이 하위 프로세스 종료를 막지 못하도록합니다. –

1

c 프로그램을 데몬으로 실행하려면 다음 단계를 수행해야합니다.

+0

이것이 잘못되었습니다 : HOME 대신 /로 변경하십시오. umask는 필요하지 않습니다. –