`

linux下创建守护进程(daemon process)代码

 
阅读更多

#include <stdio.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <sys/param.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <fcntl.h>
 #include <signal.h>
 
 void my_daemon() {
     int pid, fd;
 
     // 1.转变为后台进程
     if ((pid = fork()) == -1) exit(1);
     if (pid != 0) exit(0); // 父进程(前台进程)退出
 
     // 2.离开原先的进程组,会话
     if (setsid() == -1) exit(1); // 开启一个新会话
 
     // 3.禁止再次打开控制终端
     if ((pid = fork()) == -1) exit(1);
     if (pid != 0) exit(0); // 父进程(会话领头进程)退出
 
     // 4.关闭打开的文件描述符,避免浪费系统资源
     for (int i = 0; i < NOFILE; i++)
         close(i);
 
     // 5.改变当前的工作目录,避免卸载不了文件系统
     if (chdir("/") == -1) exit(1);
 
     // 6.重设文件掩码,防止某些属性被父进程屏蔽
     if (umask(0) == -1) exit(1);
 
     // 7.重定向标准输入,输出,错误流,因为守护进程没有控制终端
     if ((fd = open("/dev/null", O_RDWR)) == -1) exit(1); // 打开一个指向/dev/null的文件描述符
     dup2(fd, STDIN_FILENO);
     dup2(fd, STDOUT_FILENO);
     dup2(fd, STDERR_FILENO);
     close(fd);
 
     // 8.本守护进程的子进程若不需要返回信息,那么交给init进程回收,避免产生僵尸进程
     if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) exit(1);
 }
 
 #define INTERVAL 2
 
 int main(int argc, char *argv[]) {
     my_daemon(); // 首先使之成为守护进程
 
     int t = 0;
     FILE *fp = fopen("/root/tmp.txt", "a");
     fprintf(fp, "ppid = %d, pid = %d, sid = %d, pgrp = %d\n", getppid(), getpid(), getsid(0), getpgrp());
     fflush(fp);
 
     do { // 测试此后台进程,每INTERVAL秒打印当前时间t,30秒后退出此后台进程
         fprintf(fp, "%d\n", t);
         fflush(fp); // 输出缓冲区内容到文件中
         sleep(INTERVAL);
         t += INTERVAL;
     } while(t < 30);
 
     fclose(fp);
 
     return 0;
 }
 

 

保存为daemon.c

编译命令 gcc daemon.c

运行 ./a.out

查看tmp.txt文件内容 cat /root/tmp.txt

分享到:
评论

相关推荐

    c#实现的守护进程,包含代码

    在IT行业中,守护进程(Daemon)通常是指在操作系统后台运行且独立于用户会话的长期服务程序。在Unix/Linux系统中,我们常看到各种守护进程,而在Windows系统中,我们可以用相似的概念来理解,比如服务(Service)。...

    Linux daemon process and zombie process

    ### Linux 守护进程(Daemon Process)与僵尸进程(Zombie Process) ...以上是对Linux守护进程与僵尸进程的详细介绍及其示例代码分析。希望这些信息能帮助您更好地理解这两个概念以及它们在Linux系统中的作用。

    Linux创建进程

    守护进程(Daemon)是在后台运行并独立于控制终端的进程。它们通常在启动时创建,持续运行直到系统关闭,用于提供某种服务或功能。创建守护进程的关键步骤包括: 1. 调用`fork()`创建子进程,然后在父进程中退出,...

    windows守护进程代码

    在Windows操作系统中,"守护进程"这一概念通常与Linux或Unix系统相关,因为它们使用守护进程(Daemon)来后台运行服务。然而,在Windows系统中,类似的后台服务被称为"服务"。"windows守护进程代码"可能是指创建或...

    windows守护进程模版代码

    在Windows操作系统中,"守护进程"的概念通常对应于Unix/Linux系统中的"daemon",它是在后台运行的服务,不受用户会话影响,用于提供持续性的系统功能。本篇将重点介绍如何在Windows环境下创建一个类似的"守护进程...

    Java实现Linux下双守护进程

    在Linux系统中,守护进程(Daemon)常驻后台运行,用于监控并管理其他服务,确保其正常运行。Java环境下,由于Java程序运行在JVM上,不能像C语言那样直接创建进程,因此实现守护进程需要特定的策略。 ### 一、简介 ...

    Linux下C语言编程--进程的创建

    守护进程(Daemon)是一种特殊的后台进程,它们通常用于提供持续的服务,例如网络服务、日志记录等。守护进程的特点是没有控制终端,并且在系统启动时自动运行。 创建守护进程的基本步骤如下: 1. **分离会话**:...

    Linux高级程序_进程管理

    本教程主要探讨的是Linux高级程序设计中的进程管理,涉及到如何创建、控制、监控以及管理进程,特别是关于守护进程(Daemon)的深入理解。 首先,我们要了解什么是进程。在Linux中,进程是程序的执行实例,每个进程...

    谈谈守护进程和僵尸进程

    - **守护进程**(Daemon Process):是在后台运行的服务程序,通常用于执行一些长期性的任务或提供某种网络服务。例如,邮件服务、Web 服务等都需要通过守护进程来实现。守护进程的特点是没有控制终端,不会因用户...

    Linux process

    `daemon`命令可以将一个进程转化为守护进程,`service`或`systemctl`则用于管理和控制守护进程。 六、进程调度 Linux的调度策略包括抢占式调度和非抢占式调度。默认的调度器是CFS(Completely Fair Scheduler),它...

    守护进程_查看进程

    在IT领域,守护进程(Daemon)是操作系统中的一种特殊进程,它在后台运行而不与用户交互,通常用于提供持续的服务。守护进程常被用来管理网络服务、系统日志、打印服务等。在Linux和Unix-like系统中,守护进程是系统...

    linux进程监控和进程守护程序

    幸*启动配置文件当中的需要守护的程序 执行成功返回1,中途出错,返回-1 长界零家墨军零家零率家三哮零座零率零零容岸军零罕型率零零零零牢察座察零零零零季球军零容零 int moniter_ run(struct proc_struct&quot;must...

    Linux下C语言编——进程

    另一个重要的进程类型是守护进程(daemon)。守护进程通常在后台运行,不与终端关联,常用于提供系统服务。创建守护进程通常涉及以下步骤: 1. 脱离控制终端(detach from controlling terminal)。 2. 将工作目录...

    C#守护进程

    在Linux系统中,守护进程非常常见,但在Windows环境中,我们可以借助.NET框架和C#语言来实现类似的功能,即创建一个持续运行的服务。 在C#中,我们可以通过`System.ServiceProcess`命名空间来创建和管理服务,这些...

    LINUX进程控制编程

    通过`daemon()`函数或手动操作(如`setsid()`,改变工作目录,关闭标准输入/输出/错误流)可以创建守护进程。 综上,Linux进程控制编程涵盖了从创建到通信再到控制的整个生命周期,是理解和编写系统级程序的基础。...

    C# 进程守护程序 1.0

    在实现C#进程守护程序时,开发者可能使用了.NET Framework中的`System.Diagnostics.Process`类来管理和控制进程,利用`Process.Start()`方法启动新的进程实例,以及`Process.GetProcessesByName()`方法来检查进程...

    04_linux进程专题讲座v1.0.1-王保明.rar

    守护进程(daemon)通常在后台运行,不与终端关联,用于提供持续服务。 7. **进程同步与互斥**:在多进程环境下,同步操作防止数据竞争,如信号量、互斥锁和条件变量。互斥操作确保同一时间只有一个进程访问临界区...

    js代码-如何编写守护进程

    在Linux或Unix系统中,守护进程是非常常见的一种程序形式。本文将深入探讨如何使用JavaScript编写守护进程,并通过提供的`main.js`和`README.txt`文件进行讲解。 首先,我们需要理解在Node.js环境中创建守护进程的...

    Python守护进程用法实例分析

    要标志一个守护进程,可以将Process实例的daemon属性设置为True。代码如下: import os import time import random import sys from multiprocessing import Process,current_process def daemon(): p = current_...

Global site tag (gtag.js) - Google Analytics