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); }
|
相关推荐
这个文档详细介绍了守护进程的几个步骤,以及每一个步骤有什么作用。
本篇文章提供一个软件实现守护进程的办法,原理就是udp通信,单独写个守护进程程序,专门负责检测主程序是否存在,不存在则启动。主程序只需要启动live类监听端口,收到hello就回复ok就行。 为了使得兼容任意程序,...
在 Linux 中,守护进程可以使用 C 语言编程来实现,通过 fork 和 setsid 函数来创建守护进程。 fork 函数创建一个新进程,而 setsid 函数将进程从其父进程中分离出来,使其成为一个独立的会话期。同时,守护进程也...
在VC++环境下创建守护进程,主要是为了实现对特定应用程序的管理和监控。 ### 2. VC++创建守护进程的关键步骤 #### 2.1 准备工作 - **引入必要的头文件**:在本例中,我们需要包含`<iostream>`用于输入输出操作;`...
创建守护进程时,通常需要关闭标准输入、输出和错误流,因为它们不再与终端关联。例如,`nohup`命令可以用于在后台运行程序并将输出重定向到指定文件。 守护进程的生命周期与终端和信号密切相关。当终端被关闭时,...
- `main` 是启动守护进程的主要入口,调用 `_daemonize` 创建守护进程,并在一个无限循环中调用 `_doTask` 执行实际任务。 - `_daemonize` 函数实现了将进程转换为守护进程的过程,包括关闭标准输入、输出和错误流...
### Linux 下创建守护进程的步骤详解 #### 一、引言 守护进程(Daemon)是Linux系统中一种特殊的后台进程,通常用于提供持续性的服务,如网络服务、系统日志等。守护进程不依附于任何终端,并且在启动后会与控制...
#### 创建守护进程的基本步骤 1. **创建一个新的会话**:使用`setsid()`函数使进程成为新的会话的领导者,这样就可以与终端分离。 2. **改变当前工作目录**:通常设置为根目录`/`,防止守护进程占用某个文件系统。 ...
在Unix系统中,我们可以通过特定的方式来创建守护进程,但在Java中,我们可以模拟这种行为。Java中的`java.lang.Runtime`和`java.lang.ProcessBuilder`类可以帮助我们启动新的进程,而`java.util.concurrent`包下的...
3. 创建守护进程:你需要创建一个新的进程(通过在AndroidManifest.xml中指定`android:process`属性),并在其中启动你的服务。这个新进程将成为你的守护进程。 4. 监控进程状态:为了实现双守护进程,你需要编写...
在Windows系统中,我们可以通过MFC(Microsoft Foundation Classes)库来创建守护进程,以实现类似Unix/Linux环境下的守护进程功能。 MFC是微软提供的一套C++类库,用于简化Windows应用程序的开发。利用MFC,开发者...
它可能包含了上述创建守护进程的步骤,并且会包含特定的任务逻辑,比如定期执行的检查、监听特定事件或提供某种服务。具体代码细节需查看源码才能了解。 综上所述,守护进程在操作系统中扮演着重要角色,它们为系统...
创建守护进程的关键在于与运行环境的隔离。守护进程必须摆脱对控制终端、会话、进程组和工作目录的依赖,以及关闭不必要的文件描述符。通常,守护进程的创建步骤包括: 1. 脱离控制终端:调用`setsid()`创建新的...
通过阅读源码,你可以看到 `fork()`、`setsid()` 和其他相关函数的使用,这些都是创建守护进程的关键步骤。 总的来说,调试守护进程需要对操作系统进程管理和调试工具有深入的理解。结合日志、GDB、系统调用跟踪等...
2. 安卓守护进程的创建:在安卓中,开发者可以利用Service组件创建守护进程。通过设置Service的START_STICKY属性,并处理好onStartCommand()方法,使得服务在被系统杀死后能够自动重启。 3. AndroidManifest.xml...
文中还阐述了创建守护进程的具体步骤,包括创建子进程、创建新会话、改变工作目录、重设文件权限掩码、关闭文件描述符以及实现守护进程功能,并提供了完整的C语言代码示例。此外,文章还介绍了守护进程的管理与监控...
1. **创建守护进程脚本**:首先创建一个名为`php_daemon1.php`的文件,并设置其内容如下: ```php #!/usr/local/php/bin/php set_time_limit(0); while (true) { @fopen("test_" . time() . ".txt", "w"); ...
在Android中创建守护进程可以帮助我们实现更高效、独立于应用程序生命周期的后台服务。 本文将深入探讨如何在Android中创建一个简单的守护进程,以供新手学习。首先,我们需要理解Android服务(Service)和守护进程...
创建守护进程的基本步骤包括: 1. **脱离控制终端**:守护进程不应与任何终端相关联,所以首先要断开与父进程的关联并关闭所有标准输入、输出和错误流。 2. **改变工作目录**:守护进程应将当前工作目录更改为根目录...