`

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

分享到:
评论

相关推荐

    Linux守护进程 Linux守护进程

    Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux...

    socket_daemon.rar_daemon_linux 守护进程_socket daemon._守护进程_服务 守护

    实现socket的守护进程。其中serverd.c为守护进程服务程序,client1.c为客户端程序。程序简短,但不失具有代表意义。

    Linux daemon process and zombie process

    linux daemon and zombie process

    linux守护进程加排它锁文件锁

    在linux下实现守护进程并加上排它锁(文件锁),避免重复启动进程

    daemon守护进程经典

    详细介绍了守护进程的原理,及实现,对初学者特别有用

    编写Linux系统下Daemon程序的方法步骤

    Daemon程序简介Daemon是长时间运行的进程,通常在系统启动后就运行,在系统关闭时才结束。...我们也把运行的Daemon程序称作守护进程。本文介绍了在Linux下编写Daemon程序的步骤,并给出了例子程序。

    linux下的守护进程和系统日志

    Unix/Linux中的守护进程(Daemon)类似于Windows中的后台服务进程,一直在后台长时间运行的进程。它通常在系统启动后就运行,没有控制终端,也无法和前台的用户交互,在系统关闭时才结束。Daemon程序一般都作为服务...

    开发Linux操作系统后台服务进程详解

    守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某 种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。守护进程的编程...

    进程守护者 process guard

    windows系统中 经常跑exe程序,由各种原因可能导致exe执行程序死掉退出,可用改程序实现对exe程序监控,如果进程中没有找到,说明死掉了,Daemon.exe...进程守护者 process guard为本人业余开发,为了工作方便之用。

    在Linux下用QT开发Daemon程序.pdf

    在Linux下用QT开发Daemon程序.pdf

    linux守护进程随系统启动而启动

    本教程:在debian或redhat或ubuntu下编程写的daemon(守护进程),如何让它随系统启动而启动?

    Linux守护进程shell脚本

    linux守护进程shell脚本,可检测当前目录下需要守护的程序是否已经执行,如果已经执行,只需守护,如果没运行,会自动启动程序并进行守护。 其他目录下同名的程序运行不影响当前目录的进程守护。 具体用法,放到需要...

    守护进程daemon

    这是一个护进程简单程序,

    linux下如何创建守护进程的步骤

    这两天学习了linux 守护进程这个地方知识点挺多的,而且很重要,所以,...3,守护进程:Linux中的后台服务进程,daemon进程  4,守护进程的创建步骤:  (1)创建子进程,父进程退出。  经过这步以后,子进程就

    Daemon_守护进程

    文件是有关守护进程的介绍,对需要了解守护进程的相信会有很好的帮助

    Python守护进程(daemon)代码实例

    主要介绍了Python守护进程(daemon)代码实例,本文直接给出实现代码,代码中包含详细注释,需要的朋友可以参考下

    Linux编程之《守护进程》

    守护进程,也是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时...

    21 容器化守护进程的意义:DaemonSet.pdf

    21 容器化守护进程的意义:DaemonSet.pdf

    如何写php守护进程(Daemon)

    主要介绍了如何写php守护进程Daemon,

    GO语言实现的后台服务守护进程

    processName := iniConfig.Read("Monit","ProcessName") // 监控进程 programPath := iniConfig.Read("Monit","ProgramPath") // 启动路径 sleepTime := iniConfig.ReadInt("Monit", "SleepTime") // 轮询间隔 ...

Global site tag (gtag.js) - Google Analytics