Application_developing/C++ 2006/10/22 02:13
// 제작자 : 정 헌 학
// 연락처 : hunhak94@yahoo.co.kr
// 저작권 : GPL ( Gnu Public License )
// HUP, fork 를 이용한 daemon 만들기.
#include "sysconfig.h"
#include "Server.h"
#include "MailFilterServer.h"
#include "FileCtrl.h"
// for read config file #
include <signal.h>
// for signal 'HUP' char **argv;
// 시그널 핸들링 함수 .
void sig_hangup(int signum) {
cout << "Restarting...." << '\n'; execv(argv[0], argv); cout << "Could not restart" << '\n'; abort();
} void daemon() {
pid_t pid = fork();
switch (pid) {
case 0: close(0);
// 모든 출력을 닫읍시다. close(1); close(2); pid = setsid(); break; case -1: f
printf(stderr, "fail to launch daemon process\n"); exit(1); break; default: exit(0); break; } } int main(int argc, char** strings) { daemon(); // 만약 이게 없으면 부모 ps 는 좀비가 된다. // for HUP signal. struct sigaction act; bzero(&act, sizeof(act)); act.sa_handler = sig_hangup; act.sa_flags = SA_RESTART | SA_NOMASK; // if receive killall -HUP signal if(sigaction(SIGHUP, &act, 0) != 0) perror("Can't capture SIGHUP"); // 이 부분은 데몬에 따라 달라짐 .... try { Server* server = new MailFilterServer (SMTPPORT, 2, mailserver); server->MainLoop(); delete server; return 1; } catch(Exception& exp) { cerr << exp.GetMsg() << endl; return 0; } }
// 연락처 : hunhak94@yahoo.co.kr
// 저작권 : GPL ( Gnu Public License )
// HUP, fork 를 이용한 daemon 만들기.
#include "sysconfig.h"
#include "Server.h"
#include "MailFilterServer.h"
#include "FileCtrl.h"
// for read config file #
include <signal.h>
// for signal 'HUP' char **argv;
// 시그널 핸들링 함수 .
void sig_hangup(int signum) {
cout << "Restarting...." << '\n'; execv(argv[0], argv); cout << "Could not restart" << '\n'; abort();
} void daemon() {
pid_t pid = fork();
switch (pid) {
case 0: close(0);
// 모든 출력을 닫읍시다. close(1); close(2); pid = setsid(); break; case -1: f
printf(stderr, "fail to launch daemon process\n"); exit(1); break; default: exit(0); break; } } int main(int argc, char** strings) { daemon(); // 만약 이게 없으면 부모 ps 는 좀비가 된다. // for HUP signal. struct sigaction act; bzero(&act, sizeof(act)); act.sa_handler = sig_hangup; act.sa_flags = SA_RESTART | SA_NOMASK; // if receive killall -HUP signal if(sigaction(SIGHUP, &act, 0) != 0) perror("Can't capture SIGHUP"); // 이 부분은 데몬에 따라 달라짐 .... try { Server* server = new MailFilterServer (SMTPPORT, 2, mailserver); server->MainLoop(); delete server; return 1; } catch(Exception& exp) { cerr << exp.GetMsg() << endl; return 0; } }
이 글에는 트랙백을 보낼 수 없습니다
0