博客
关于我
守护进程
阅读量:753 次
发布时间:2019-03-23

本文共 2019 字,大约阅读时间需要 6 分钟。

守护进程(Daemon)管理指南


在 Linux 或 Unix 系统中,守护进程(Daemon)是系统运行的核心服务之一。它代表着脱离终端控制的进程,能够独立运行并配置运行级别。守护进程通常在系统引导时启动,并在系统关闭时终止。下文将详细介绍守护进程的创建方式及其实用示例。


守护进程的定义

守护进程(Daemon)是一个生存期较长的进程,通常独立于控制终端。在Linux中,任意终端上运行的进程都依附于该终端,当终端关闭时,该进程也会终止。而守护进程则可以在其独立于终端的运行过程中,继续执行任务或等待事件。


守护进程的特点

  • 长生存期:守护进程在系统运行期间持续不断地执行任务或等待事件。
  • 脱离终端控制:守护进程可以忽略用户输入的终端信息,不受终端状态的影响。
  • 随系统启动而启动:多数守护进程随引导程序启动,并在系统关闭时自行终止。
  • 服务化的特性:许多系统服务都由守护进程提供,例如 crond(作业规划)、lqqd(打印队列处理)等。

  • 创建守护进程的步骤

  • 创建子进程并让父进程退出

    使用 fork 函数创建子进程后,父进程可选择退出,这样可以避免用户在终端中看到父进程的运行状态。

  • 摆脱会话期和进程组控制

    调用 setsid 函数创建新的会话,并让该子进程成为会话组的组长。这样可以完全切断与原终端、会话期和进程组的联系。

  • 修改当前目录为根目录

    使用 chdir 函数将根目录设置为守护进程的工作目录,以避免运行时文件系统的不稳定性问题(如挂载点丢失)。

  • 恢复文件权限掩码

    比较常见的做法是重设文件权限掩码为 0,以便子进程获得完整文件操作权限。

  • 关闭不必要的文件描述符

    使用 close 函数关闭输入、输出和报错文件描述符,以释放资源。


  • 示例:创建一个简单的守护进程

    以下是一个实现在 /tmp/daemon.log 中每隔10秒写入一行日志的守护进程示例代码:

    #include 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #define MAXFILE 65535void sigterm_handler(int arg){ _running = 0;}int main(){ pid_t pc; int i, fd, len; char *buf = "this is a Daemon\n"; len = strlen(buf); pc = fork(); if (pc < 0) { printf("error fork\n"); exit(1); } else if (pc > 0) { exit(0); } setsid(); pid = fork(); if (pid < 0) { perror("fork error"); exit(1); } if (pid > 0) { exit(0); } chdir("/"); umask(0); for (i = 0; i < MAXFILE; i++) { if ((i == STDERR_FILENO || i == STDIN_FILENO || i == STDOUT_FILENO) && fd > 0) { close(i); } } signal(SIGTERM, sigterm_handler); _running = 1; while (_running) { if ((fd = open("/tmp/daemon.log", O_CREAT | O_WRONLY | O_APPEND, 0600)) < 0) { perror("open"); exit(1); } write(fd, buf, len); close(fd); usleep(10000); // 检查间隔时间 } return 0;}

    常见守护进程列表

  • crond:用于定期执行计划任务,配置在 /etc/crontab 文件中。
  • httpd:Apache 网络服务,提供静态和动态网页内容。
  • MeyServer:用于处理网络文件共享和打印请求。
  • dnsmasq:动态 DNS 和 WWW 代理服务器。

  • 注意事项

  • 资源管理:使用 fork 创建子进程时,应注意释放不必要的资源,避免造成系统负担。
  • 信号处理:添加信号处理函数(如 signal 函数)以确保守护进程在终止时能够优雅地关闭文件描述符。
  • 调试和验证:在实际应用中,可以通过检查 /etc/syslog/var/log 中的日志文件验证守护进程的运行情况。

  • 以上内容不仅保留了技术细节的准确性,还通过自然的叙述方式传达了守护进程的核心知识。

    转载地址:http://osuzk.baihongyu.com/

    你可能感兴趣的文章
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
    查看>>
    NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
    查看>>
    NIFI1.21.0最新版本安装_配置使用HTTP登录_默认是用HTTPS登录的_Https登录需要输入用户名密码_HTTP不需要---大数据之Nifi工作笔记0051
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增加修改实时同步_使用JsonPath及自定义Python脚本_03---大数据之Nifi工作笔记0055
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
    查看>>
    NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现update数据实时同步_实际操作05---大数据之Nifi工作笔记0044
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>
    NIFI从Oracle11G同步数据到Mysql_亲测可用_解决数据重复_数据跟源表不一致的问题---大数据之Nifi工作笔记0065
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
    查看>>