守护进程

简介:

本文,相关评论守护进程的主要定义和原则。并通过一个例子来说明如何编写用户守护进程。


1.守护进程的撰写条件:

1)D要在系统中处于一直运转的状态,也就是说while循环,时刻在监听服务
2)D不能在关闭终端的时候退出—— 为什么终端关闭将导致进程退出呢?
3)D要脱离控制终端,登录会话和进程组—— 注销的时候,为什么有的进程将被注销。而有的不会?

2.相关原理


Q:每一个进程都属于一个进程组,就是进程组长的ID。一个登录会话能够包括多个进程组,这些进程组共享一个控制终端.他们的关系能够參考下图?


Q:为什么要设计进程组id?
A:(猜想)方便对作业进行管理,可能在某些时候我们须要对一组进程而不是一个进程进行管理;比如在一个终端发送信号,那么信号对全部属于这个终端的进程组都是有效的。



Q.tip:怎样查看一个进程组的进程组id?怎样查看控制终端?ps和top命令的每一个字段是什么意思?

ps 依照用户的要求输出全部相关的信息:ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

只查看进程组id:ps -C sshd -o pgrp
ps -p ID -o pgrp

Q:怎样得到进程的组id和设置进程的组id?
A:pid_t getpgrp() ; 
int setpgid(pid_t pid, pid_t pgid) :进程能够调用这个函数来设置自己或者子进程的pgid

3.守护进程的编写步骤

守护进程的编写中,有两个基本的部分:1)脱离控制 2)清理资源
守护进程编程步骤
1. 创建子进程,父进程退出
•全部工作在子进程中进行
•形式上脱离了控制终端
2. 在子进程中创建新会话
•setsid()函数
•使子进程全然独立出来,脱离控制
3. 改变当前文件夹为根文件夹
•chdir()函数
•防止占用可卸载的文件系统
•也能够换成其他路径
4. 重设文件权限掩码
•umask()函数:将某些文件权限标记为设定为0
•防止继承的文件创建屏蔽字拒绝某些权限
•添加守护进程灵活性
5. 关闭文件描写叙述符
•继承的打开文件不会用到,浪费系统资源。无法卸载
•getdtablesize()

    •返回所在进程的文件描写叙述符表的项数,即该进程打开的文件数目

code:

#include "stdio.h"
/* #include "type.h" */
#include <unistd.h>
#include <fcntl.h>
/* #include < sys/wait.h> */
#include <sys/types.h>
#include <string.h>

int main(int argc, char *argv[])
{
	pid_t pid;
	int i, fd;
	char *buf = "This is a deamon program";

	if( (pid = fork()) < 0){
		printf("fork error!");
		exit(1);
	}
	else if(pid >0){
		exit(0);
	}
	/* setsid(); */

	chdir("/");
	umask(0);
	for (int i = 0; i < getdtablesize(); ++i){
		close(i);
	}
	while(1){
		if( ( fd=open("/tmp/daemon.log", O_CREAT| O_WRONLY | O_APPEND, 0600)) < 0){
		}	
		write(fd, buf, strlen(buf)+1);
		close(fd);
		sleep(10);
		printf("never");
	}
	return 0;
}


版权声明:本文博主原创文章,博客,未经同意不得转载。


本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4873570.html,如需转载请自行联系原作者


相关文章
|
4月前
守护进程笔记
守护进程笔记
21 0
|
6月前
|
Shell Linux C++
C/C++ 守护进程的创建
C/C++ 守护进程的创建
47 0
|
10月前
|
C++
C++采用Daemon进行后台程序部署
在C++中,如果要让一个程序一直在后台运行并且和终端会话分离,我们可以将其作为守护进程运行,以下是创建C++守护进程的一般步骤。
66 0
|
Shell Linux
【Linux守护进程】二、守护进程详解
【Linux守护进程】二、守护进程详解
163 0
【Linux守护进程】二、守护进程详解
|
jenkins 持续交付
jenkins通过supervisor配置守护进程
jenkins通过supervisor配置守护进程
184 0
|
Unix Linux iOS开发
守护进程详解
守护进程详解
184 0
|
Unix 应用服务中间件 Shell
Supervisor守护进程
使用Supervisor的背景: #Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。
1158 0
|
Java Python
Supervisor 进程守护工具
说明 公司Linux服务器无法连接外网,只能下载安装包上传到服务器进行离线安装 Python版本: Python-2.7.5 Supervisor版本: supervisor-3.1.3 setuptools版本: setuptools-2.0 meld3版本: meld3-1.0.2 Supervisor简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
|
Docker 容器 网络协议
使用反向代理,实现快速配置、重启 Docker 守护进程
发布 Docker 守护进程通常涉及到创建所需的证书,重新配置 Docker 守护进程并重新启动它。但是,您通常没有更改守护进程配置或重启守护进程所需要的权限。接下来,我将演示如何使用容器化反向代理来实现它。
1644 0