linux 守护进程编程

概述:

  • Daemon运行在后台也称作“后台服务进程”。 它是没有控制终端与之相连的进程。它独立于控制终端、通常周期的执行某种任务。
  • 守护进程脱离终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的任何终端信息所打断。
  • 由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依赖这个终端,这个终端就称为这些进程的控制终端。
  • 当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它被执行开始运转,直到整个系统关闭时才退出。
  • 进程组:是一个或多个进程的集合。进程组由进程组ID来唯一标识。除了进程号(PID)之外,进程组ID(GID)也是一个进程的必备属性。每个进程都有一个组长进程,其组长进程的进程号等于进程组ID。且该进程组ID不会因为组长进程的退出而受影响。
  • 会话周期:会话期是一个或多个进程组的集合。通常,一个会话开始于用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。
  • 控制终端:由于在linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依赖这个控制终端。

守护进程的特性:

  1. 守护进程最重要的特性是后台运行。
  2. 守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符、控制终端、会话和进程组、工作目录已经文件创建掩码等。这些环境通常是守护进程从父进程那里继承下来的。
  3. 守护进程的启动方式有其特殊:它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。

daemon进程编程流程:

1.创建子进程,父进程退出

2.摆脱当前会话,创建新的会话组,子进程成为组长

3.关闭文件描述符号

4.设置文件掩码

5.设置工作目录

注意:有时还要处理SIGCHLD信号signal(SIGCHLD, SIG_IGN);防止僵尸进程(zombie))

下面就可以添加任何你要daemon做的事情

示例:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 #include <sys/types.h>
 6 #include <sys/stat.h>
 7 #include <sys/wait.h>
 8
 9
10 int main(int argc, const char *argv[])
11 {
12     int ret;
13     int i;
14     char * buf = "hello world";
15     pid_t pid;
16     FILE * fp;
17
18     pid = fork();
19     if(pid < 0){
20         perror("fork");
21         return -1;
22     }
23     else if(pid > 0){
24         exit(0);    //父进程退出
25     }
26
27
28     setsid();    //让子进程成组长  并创建新的会话  并脱离当前终端
29
30
31 //关闭标准输入流
32     for(i=0;i<3;i++){
33         close(i);
34     }
35
36 //更改工作目录至根目录  (可选)
37     chdir("/");
38
39 //设置文件掩码 (可选)
40     umask(0);
41
42
43 //守护进程间隔一段时间向文件写入内容
44     while(1){
45
46         fp = fopen("daemon.log","a+");
47         if(!fp){
48             return -1;
49         }
50
51         ret = fwrite(buf,1,strlen(buf),fp);
52         if(ret < 0){
53             return -1;
54         }
55
56         fclose(fp);
57
58         sleep(5);
59     }
60
61     return 0;
62 }
时间: 2024-10-12 19:05:14

linux 守护进程编程的相关文章

Linux守护进程的编程实现

Linux 守护进程的编程方法 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程.Linux的大多数server就是用守护进程实现的.比方,Internetserverinetd,Webserverhttpd等.同一时候,守护进程完毕很多系统任务.比方,作业规划进程crond,打印进程lpd等. 守护进程的编程本身并不复杂,复杂的是各种版本号的Unix的实现机制不尽同样,造成不同Unix环境下守护进

linux守护进程

#include <iostream>#include <unistd.h>//#include "curl/curl.h"#include "app_curl.h"#include "youtube_package.h"#include "CAutoMail.h"#include <fcntl.h>#include <signal.h>#include <unistd.h

笔记整理--Linux守护进程

Linux多进程开发(三)进程创建之守护进程的学习 - _Liang_Happy_Life__Dream - 51CTO技术博客 - Google Chrome (2013/10/11 16:48:27) Linux多进程开发(三)进程创建之守护进程的学习 2013-07-04 17:25:35 标签:守护进程 daemon Linux多进程开发 系统编程 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liam2199.bl

守护进程编程要点

守护进程,脱离于终端,可避免被任何的终端信号所打断,常用于服务器程序.我们用ssh远程登录,可能做的事情就是启动某个程序,如果不是守护进程,在我们退出终端时,进程立刻被杀死了,因为由终端启动的进程是tty的子进程.可用cron或nohup来启动.另外的启动方式有1.在系统启动时由启动脚本启动,通常放在/etc/rc.d/.2.利用inetd超级服务器启动,如telnet等.守护进程编程要点1.屏蔽一些有关控制终端的信号.signal(SIGTTOU,SIG_IGN);2.让子进程在后台运行,父进

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

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

Linux守护进程编写指南 (注:文章为转载)

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD

转:linux守护进程的启动方法

Linux 守护进程的启动方法 作者: 阮一峰 日期: 2016年2月28日 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的由来 Web应用写好后,下一件事就是启动,让它一直在后台运行. 这并不容易.举例来说,下面是一个最简单的Node应用server.js,只有6行. var http = require('http'); http.createServer(function(req, res)

C#开发Linux守护进程

C#开发Linux守护进程 Linux守护进程是Linux的后台服务进程,相当于Windows服务,对于为Linux开发服务程序的朋友来说,Linux守护进程相关技术是必不可少的,因为这个技术不仅仅是为了开发守护进程,还可以拓展到多进程,父子进程文件描述符共享,父子进程通讯.控制等方面,是实现Linux大型服务的基础技术之一. 去年我也曾写了一篇关于守护进程的帖子,名字叫<.NET跨平台实践:用C#开发Linux守护进程>,这篇文章的的确确实现了一个Daemon,不过,它有一个弱点,不能运行多

.NET跨平台实践:用C#开发Linux守护进程

Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为Linux开发与控制台无关的,需要在后台长时间不间断运行的“服务程序”,Daemon技术是非常重要的. Daemon程序一般用c/c++开发.不过,我今天要讲的,不是怎么用c/c++开发daemon,而是用C#! 一,创建Daemon程序: 用VS新建一个控制台项目,假设名称是MyDaemon,输入下