一个守护进程实例

void DaemonInit(void)
{

//LOG::INF("[ServerMeeting] 服务初始化.\n");
int
pid;

//如果是父进程,结束父进程,子进程继续
if(pid=fork())
{
  exit(0);
}
/*else
if(pid<0) // 不可能进入
{
  exit(1); //fork失败,退出
}*/

//是第一子进程,后台继续执行
setsid();//第一子进程成为新的会话组长和进程组长

//并与控制终端分离
if(pid=fork())
{
  exit(0);//是第一子进程,结束第一子进程
}
/*else
if(pid<0)
{
  exit(1);//fork失败,退出
}*/

//关闭打开的文件描述符,保留标准输入(0),标准输出(1)和标准错误输出(2)
//还可以将这3文件通过dup2重定向:error=open("/tmp/error",O_WRONLY|O_CREAT,
0600); dup2(error,2); close(error); //in=open("/tmp/in",O_RDONLY|O_CREAT,0600);
if(dup2(in,0)==-1) perror("in"); close(in);
//out=open("/tmp/out",O_WRONLY|O_CREAT,0600);if(dup2(out,1)==-1) perror("out");
close(out);
for(int fd=3,fdtablesize=getdtablesize();fd
<fdtablesize;fd++)
{

close(fd);

}

//重设文件创建掩模
umask(0);

//信号处理
signal(SIGTTOU,SIG_IGN);

signal(SIGTTIN,SIG_IGN);
signal(SIGTSTP,SIG_IGN);
signal(SIGHUP
,SIG_IGN);
signal(SIGTERM,SIG_IGN);

//设置系统参数
struct rlimit l =
{0,0};
l.rlim_cur=65535;
l.rlim_max=65535;
setrlimit(RLIMIT_NOFILE,&l);

}

一个守护进程实例,布布扣,bubuko.com

时间: 2024-10-13 01:00:29

一个守护进程实例的相关文章

创建一个守护进程

一.概述:守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是随系统启动而存在,随系统关闭而消失的进程(也就是开机之后就会存在,关机才消失).守护进程是一种很有用的进程,Linux的大多数服务器就是用守护进程实现的. 在终端运行命令:ps axj | head 参数a表示不仅列出当前用户进程,也列出所有其它用户进程. 参数x表示不仅列出有控制终端的进程,也列出所有无控制终端的进程. 参数j表示列出与作业控制

简单实现一个守护进程(Daemon)

学习进程就不得不提到一个运行在后台的特殊进程--守护进程.(也称精灵进程).Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互.其它进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程不受用户登录注销的影响,它们一直在运行着而我们就将这种进程称为守护进程. 守护进程独立于控制终端并周期性的执行某种任务或者等待处理某些发生的事件.守护进程是一种很有用的进程.Linux的大多数服务器就是用1守护进程实现的,比如,Internet服务

【Linux学习】编写一个守护进程

题目: 编写一个守护进程,每隔3秒钟将当前时间输出.要求: 不能使用init_daemon系统调用. #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <time.h> #include <unistd.h> int main(void) { pid_t pid; pid = fork(); if(pid > 0) { exit(0); } if(0 ==

编写一个守护进程

编写守护进程程序时需遵循一些基本规则,以防止产生不必要的交互作用,下面先说明这些规则,然后给出一个按照这些规则编写的函数deamonize. (1)首先,调用umask将文件创建屏蔽字设置为一个已知值(通常为0). (2)调用fork,然后是父进程exit. (3)调用setsid创建一个新会话. (4)将当前工作目录更改为根目录. (5)关闭不需要的文件描述符. (6)将文件描述符0,1,2指向 /dev/null 以下是一个记录日志的守护进程. 1 #include "apue.h"

Linuxx环境下,使用PHP创建一个守护进程

<?php $pid = pcntl_fork(); // fork if ($pid < 0) exit; else if ($pid) // parent exit; else { // child $sid = posix_setsid(); if ($sid < 0) exit; for($i = 0; $i <= 60; $i++) { // do something for 5 minutes sleep(5); } } ?> 这是php官方手册给出的方法,不过在

如何编写一个守护进程daemon

大体步骤如下 1.   调用fork()函数创建子进程后,让父进程立即exit(),这样产生的子进程变成孤儿进程,由init进程接管. 2.   调用setsid()函数,使得新创建的进程脱离控制终端,同时创建新的进程组,并成为该进程组的首进程.在linux系统中,所有的进程都属于各自的进程组,进程组是一个或多个进程的集合,一个进程组中至少有一个进程成员,否则就消亡了.每个进程组都有一个进程组ID,是由领头进程的进程号决定的,会话则是一个或多个进程组的集合,每个会话都有一个领头进程,会话和进程组

Python实例浅谈之五Python守护进程和脚本单例运行

一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc.d中启动,可以由inetd守护进程启动,也可以有作业规划进程crond启动,还可以由用户终端(通常是shell)执行. Python有时需要保证只运行一个脚本实例,以避免数据的冲突. 二.Python守护进程 1.函数实现 #!/usr/bin/env python #coding: utf-8

Linux守护进程简介和实例详解

简介 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.Linux的大多数服务器就是用守护进程实现的.比如,Internet服务器inetd,Web服务器httpd等.同时,守护进程完成许多系统任务.比如,作业规划进程crond,打印进程lpd等. 下面是linux系统中常见的一些守护进程. amd:自动安装NFS(网络文件系统)守侯进程apmd:高级电源管理 Arpwatch:记录日志并构建一个在L

写一个Windows上的守护进程(1)开篇

写一个Windows上的守护进程(1)开篇 最近由于工作需要,要写一个守护进程,主要就是要在被守护进程挂了的时候再把它启起来.说起来这个功能是比较简单的,但是我前一阵子写了好多现在回头看起来比较糟糕的代码,所以就想这次写的顺眼一点.写完后发现,诶,还可以哟.于是就总结总结. 一.大致需求 1. 功能——当被守护进程挂掉后再次启动它 2. 可配置需要守护的进程 二.通盘考虑 1. 为了避免重复造轮子,况且有的轮子可能自己也造不出来,上boost库 2. 为了能够获得较高的权限和能够开机自动启动,将