1,简介
守护进程是一种后台运行并且独立于所有终端控制之外的进程。UNIX/Linux 系统通常许多的守护进程,它们执行着各种系统服务和管理的任务。
2,守护进程的建立
守护进程不合任何一个终端相关,启动它的方法有如下几种:
1,在启动脚本中启动
2,由其他进程启动,如inetd程序可以监听网络请求,启动相应的守护进程。
3,由cron定时启动
4,也可以由终端启动,一般用于测试,或者重启服务
3,错误输出
守护进程的错误输出不能输出到终端,由syslog()调用输出至系统的相应日志中。
4,守护进程的建立
1,fork
fork()一个新进程,并终止父进程,这样子进程就成了后台进程,并保证其不是一个进程组的首进程。
2,setsid
然后setsid()创建一个新的进程组,并成为此进程组的首进程,此子进程完全脱离了与原终端的联系,成为独立于终端之外的独立进程。
3,忽略SIGHUP信号,重新fork(),使其不是进程组的首进程,防止可以防止在某些情况下进程意外的打开终端而重新与终端发生联系。
4,改变工作目录,清除文件掩码,使守护进程在在哪里启动都可以,消除自身掩码对创建文件的影响。
5,关闭打开文件。因为子进程会继承父进程的打开文件,这样可以防止以后可能的冲突。
6,打开log;
整个的代码框架如下:
#include <sys/types.h> #include <signal.h> #include <unistd.h> #include <syslog.h> #define MAXFD 64 void daemon_init(const char *pname, int facility) { int i: pid_t pid; /* fork,终止父进程 */ if (pid=fork()) exit(0); /* 第一子进程 */ setsid(); signal(SIGHUP,SIG_IGN); /* fork,终止第一子进程 */ if (pid=fork()) exit(0); /* 第二子进程 */ daemon_proc=1; /* 将工作目录设定为"/" */ chdir("/"); /* 清除文件掩码 */ umask(0); /* 关闭所有文件句柄 */ for (i=0;i<MAXFD;i++) { close(i); } /* 打开 log */ openlog(pname,LOG_PID,facility); }
|
相关推荐
这个文档详细介绍了守护进程的几个步骤,以及每一个步骤有什么作用。
创建子进程,父进程退出 这是编写守护进程的第一步。... 在子进程中创建新会话 这个步骤是创建守护进程中最重要的一步,虽然它的实现非常简单,但它的意义却非常重大。在这里使用的是系统函数setsid,在具体
本篇文章主要介绍了linux下如何创建守护进程的步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Rust中的一个简单的手势守护进程_Rust_Makefile_下载.zip
主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to havechildren 注意:进程之间是...
用模板的方式创建守护进程,只需要定义一个与int work(int argc,char **argv)相同的伪入口函数传入start_domain()函数即可
1、什么是守护进程 守护进程是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或循环等待处理某些事件的发生;...3、创建守护进程的步骤 (1) fork()创建子进程,父进程exit()退出 这是创建守
这个bat脚本资源可以在Windows环境下实现Java程序的守护进程和自动重启。它通过一个循环监控Java程序进程,如果检测到程序异常退出,会自动重启程序。同时具有可配置的重启次数和重启间隔时间。 这个小巧但实用的bat...
创建守护进程,每十秒将系统时间写入time.log
Linux系统中守护进程的创建方法.pdf
【ASP.NET编程知识】.net Core 3.0 WebApi 创建Linux守护进程的方法.docx
封装好后,很少的代码就可以增加程序守护功能,可以指定守护主程序(目前只支持32位程序做主程序),支持定时重启程序和程序奔溃后自动重启,工程文件增加TDaemonClient_Auto.RegisterToHost,程序即可被守护
守护进程就是Daemon程序,是一种在系统后台执行的程序,它独立于控制终端并且执行一些周期任务或触发事件,通常被命名为”d”字母结尾,如常见的httpd、syslogd、systemd和dockerd等。 代码实现 python可以很简洁地...
守护进程管理基类,提供守护进程创建及终止、日志记录、子进程管理
Python multiprocessing.pool创建非守护进程的方法
一点学习笔记 参考了B站:https://www.bilibili.com/video/BV17h411s7Sf 如有不对的地方希望大家指正,谢谢!
启动后检查进程如果没有运行,就运行一次,如果已经存在了则不处理,因为有些程序,要开启很多个线程运行,只有等所有进程都退出之后,才会启动一次守护的进程,之后又会交给程序自适应。 29、增加循环启动时间次数...