`
kenby
  • 浏览: 724643 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

守护进程的实现

 
阅读更多

6个步骤

 

步骤1:创建子进程,杀死父进程,目的是为了步骤2中调用setsid可以成功。

 

步骤2:创建新会话,并自任组长。目的是脱离控制终端

               会话组长调用 setsid 会失败,步骤1创建的子进程必然不是会话组长,

               这就保证了 setsid 可以成功。

 

步骤3:修改工作目录为根目录。

              当进程没有结束时,工作目录是不能卸载的,为了防止这种情况,

              把工作目录设为根目录。因为根目录一般是不用卸载的。

 

步骤4:修改文件权限掩码,很多情况下,守护进程会创建很多临时文件,

              出于安全性考虑,往往不希望这些文件被其他用户查看,这时可以

               使用 umask 函数修改文件权限,创建掩码的取值,以满足守护进程的要求。

 

步骤5:关闭标准输入输出

 

 

int daemon_me()
{
    int  fd;

    /* 步骤1: 创建子进程,杀死父进程 */
    switch (fork()) {
        case -1:
            return -1;

        case 0:
            break;

        default:
            exit(0);
    }

    /* 步骤2: 创建新会话,自任组长 */
    if (setsid() == -1) {
        return -1;
    }

    /* 步骤3: 修改工作目录 */
    chdir("/");

    /* 步骤4: 将文件权限掩码设为0 */
    umask(0);

    /* 步骤5: 关闭标准输入输出 */
    fd = open("/dev/null", O_RDWR);
    if (fd == -1) {
        return -1;
    }

    if (dup2(fd, STDIN_FILENO) == -1) {
        return -1;
    }

    if (dup2(fd, STDOUT_FILENO) == -1) {
        return -1;
    }

    if (dup2(fd, STDERR_FILENO) == -1) {
        return -1;
    }

    if (fd > STDERR_FILENO) {
        if (close(fd) == -1) {
            return -1;
        }
    }

    return 0;
}
 

 

 

分享到:
评论

相关推荐

    python编写守护进程实现当python进程被杀后重启进程的源代码

    本篇文章将深入探讨如何用Python编写一个守护进程,以及在进程被杀后自动重启的实现方法。 首先,让我们了解守护进程的基本概念。在Unix-like操作系统中,守护进程通常在用户登录会话之外运行,避免受到用户退出或...

    Qt编写守护进程

    本篇文章提供一个软件实现守护进程的办法,原理就是udp通信,单独写个守护进程程序,专门负责检测主程序是否存在,不存在则启动。主程序只需要启动live类监听端口,收到hello就回复ok就行。 为了使得兼容任意程序,...

    android 基于aidl实现的守护进程

    **三、守护进程实现** 在Android中,守护进程通常与Service结合使用,因为Service默认是在主线程中运行,无法做到真正的后台运行。为了使Service变成守护进程,我们需要以下步骤: 1. **创建Service**:首先创建一...

    守护进程,背靠背c++实现

    在本话题中,我们将深入探讨守护进程的原理、C/C++实现以及如何设计具有防杀功能的守护进程。 守护进程的工作原理: 守护进程在Unix/Linux系统中是非常常见的一种进程类型。它们通过脱离控制终端(detaching from ...

    用qt实现的程序守护进程程序

    主要功能: 可设置检测的程序名称。 可设置udp通信端口。 可设置超时次数。 自动记录已重启次数。 自动记录最后一次重启时间。 是否需要重新刷新桌面。 可重置当前重启次数和最后重启时间。 自动隐藏的托盘运行或者...

    Linux系统中守护进程的创建方法.pdf

    Linux 的大多数服务器进程就是用守护进程实现的,例如 Internet 服务器 inetd、Web 服务器 httpd 等。同时,守护进程完成许多系统任务,比如作业规划进程 crond、打印进程 lpd 等。 守护进程的特点是独立于终端,...

    我自己写的守护进程-源码

    然而,这个话题是关于在Windows环境下使用C++编写的一个守护进程实现。 在Windows上,守护进程的实现方式不同于Linux,因为Windows并不直接支持守护进程的概念。在Linux中,守护进程通常通过脱离控制终端、改变工作...

    Linux守护进程的编程方法.pdf

    Linux系统中许多重要的服务都是通过守护进程实现的,例如Internet服务器`inetd`、Web服务器`httpd`、作业规划进程`crond`以及打印进程`lpd`等。 守护进程具有以下关键特性: 1. **后台运行**:守护进程不依赖于...

    分享PHP守护进程类

    ...守护进程(Daemon)在Linux和其他类Unix系统中扮演着...通过这样的方式,PHP开发者可以利用守护进程实现更复杂的后台服务,如队列处理、定时任务,甚至替代`crontab`来调度任务,增加了PHP在系统级任务中的应用范围。

    Python-NutzWk微服务开发框架应用守护进程

    **Python中的应用守护进程实现** 在Python中,可以使用第三方库如`daemonize`或`py-daemon`来实现应用守护进程。这些库提供了标准化的方法来分离进程,使其脱离终端并以后台模式运行,同时保持日志记录和错误处理的...

    C#控制台实现的一个简单的守护进程程序

    在这个名为"C#控制台实现的一个简单的守护进程程序"的项目中,开发者创建了一个能够检测目标程序状态并自动重启的控制台应用程序。 首先,我们要理解守护进程的基本概念。在操作系统中,守护进程是一种没有控制终端...

    java实现守护进程,有单独的监听进程, 两个或多个进程,两个或多个jvm

    在Java编程环境中,实现守护进程(Daemon)以及创建多个进程和JVM是非常常见的需求,特别是在构建分布式系统或者需要持续后台运行的服务时。本篇将详细阐述如何使用Java来实现这些功能。 守护进程通常是一个在后台...

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

    在C#编程语言中,可以利用.NET Framework或.NET Core提供的功能创建Windows服务,实现类似守护进程的功能。 标题“c#实现的守护进程,包含代码”意味着我们将探讨如何使用C#编写一个能够监控并保证某个特定进程始终...

    守护进程时间服务器C语言实现.rar

    对于初学者来说,这个项目提供了学习C语言编程、网络编程以及守护进程实现的宝贵机会。通过实践,不仅可以加深对C语言的理解,还能掌握网络通信的基本原理,为后续的系统级编程打下基础。在实现过程中,可能会遇到如...

    Windows使用bat批处理实现守护进程脚本.bat

    Windows使用bat批处理实现守护进程脚本

    Linux操作系统下守护进程的编程方法

    Linux系统中的许多服务都是通过守护进程实现的,例如网络服务(如inetd)、Web服务(如httpd)、打印服务(如lpd)等。 守护进程具有以下主要特性: 1. **后台运行**:守护进程在系统后台运行,不会占用用户的终端...

    Linux守护进程简介.pdf

    3. **系统服务**:大多数系统服务,如网络服务(HTTP服务器、FTP服务器等)、计划任务(cron)、日志记录(syslogd)等,都是通过守护进程实现的。 【守护进程工作方式】 守护进程的工作方式主要有两种:独立运行...

    守护进程

    - **系统服务提供者**:很多重要的系统服务都是通过守护进程实现的,比如打印服务、网络服务等。 - **提高系统稳定性**:通过将服务部署为守护进程的形式,可以在一定程度上提高系统的稳定性和可靠性。 - **资源管理...

    守护进程(互相监听)

    在Android系统中,由于其基于Linux内核,也支持守护进程的概念,但实现方式略有不同。 标题"守护进程(互相监听)"可能指的是两个守护进程之间进行通信和监控的场景,这种设计可以确保即使一个守护进程出现问题,另...

    基于Linux守护进程的分析与实现.pdf

    在实现守护进程时,通常会有一个初始化宏如`INIT_DAEMON`,这个宏会包含上述的步骤,确保守护进程的正确运行。示例代码中,如果`fork()`两次成功,第一次创建的子进程会结束,第二次创建的子进程成为真正的守护进程...

Global site tag (gtag.js) - Google Analytics