玩蛇网提供最新Python编程技术信息以及Python资源下载!
您现在的位置: 玩蛇网首页 > linux入门教程 > 正文内容

Linux进程守护学习笔记

Python入门佳作 经典教程的全新修订 10个项目引人入胜
玩蛇网推荐图文教程: python 列表list

本文是Linux进程守护学习的笔记,记录了一些很实用的方法,贴在这里和大家一同分享。如何守护进程?是工作在后台的程序,使用者看不到,但并不代表它没在工作。其实,守护进程是不需要和控制台进行通信的,所以可以将标准输入、标准输出以及标准出错都关掉。

那么要如何关掉呢?其实调用库函数daemon就能达到这一需求:#include <unistd.h>
int daemon(int nochdir, int noclose);

还有在daemon函数内部,它会将stdin、stdout以及stderr都关掉。

下面做一个个人的心得总结:
个人的理解是,所谓守护进程它本身就是一个概念,并不一定是调用了daemon函数就是守护进程;而未调用daemon函数就不是守护进程。

daemon函数是如何close掉stdin、stdout以及stderr的呢?
将stdin、stdout和stderr都重定向到黑洞文件/dev/null中。
int fd = open("/dev/null", O_RDWR, 0);
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
close(fd);

其中系统调用open用来打开一个文件,并返回该文件的文件描述符:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags, mode_t mode);
系统调用close用来关闭一个指定的文件,
#inlcude <unistd.h>
int close(int fd);

系统调用dup2用来将newfd对应的文件重定向到oldfd上。
这两个文件描述符共享同一个数据结构,这样对其中一个文件的操作会同时影响到这两个文件。

可以将newfd理解成一个指针,它指向oldfd指向的位置,这样无论是对newfd还是oldfd的操作都是一样的。
#include <unistd.h>

int dup2(int oldfd, int newfd);

系统独立运行的守护进程称之为stand alone daemon,常见的包括atd、crond、syslogd等。
和stand alone daemon相对的另一种就是super daemon。

Linux进程守护学习笔记
比如inetd,它在后台监听网络端口,当接收到client端的请求时,它会根据请求的端口来

决定启动不同的网络服务程序。

另外一种分类的方法分为:signal control daemon和interval control daemon。
像inetd就属于signal control daemon;crond、syslogd等就属于interval control daemon。

守护进程还有很多,比如dhcpd、httpd、ntpd等等。

玩蛇网文章,转载请注明出处和来源网址:http://www.iplaypy.com/linux/l6899.html



微信公众号搜索"玩蛇网Python之家"加关注,每日最新的Python资讯、图文视频教程可以让你一手全掌握。强烈推荐关注!

微信扫描下图可直接关注

玩蛇网PythonQQ群,欢迎加入: ① 240764603 玩蛇网Python新手群
出炉日期:2017-01-10 10:17 玩蛇网 www.iplaypy.com

我要分享到:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules