2019独角兽企业重金招聘Python工程师标准>>>

#include "myapue.h"
#include <syslog.h>
#include <fcntl.h>
#include <sys/resource.h>
#include <sys/stat.h>void daemonize(const char *cmd)
{int i, fd0, fd1, fd2;pid_t pid;struct rlimit rl;struct sigaction sa;umask(0);if(getrlimit(RLIMIT_NOFILE, &rl) < 0)err_quit("%s: can't get file limit", cmd);if((pid = fork()) < 0)err_quit("%s: can't fork", cmd);else if(pid != 0)exit(0);setsid();sa.sa_handler = SIG_IGN;sigemptyset(&sa.sa_mask);sa.sa_flags = 0;if(sigaction(SIGHUP, &sa, NULL) < 0)err_quit("%s: can't ignore SIGHUP", cmd);if((pid = fork()) < 0)err_quit("%s: can't fork", cmd);else if(pid != 0)exit(0);if(chdir("/") < 0)err_quit("%s: can't change directory to /", cmd);if(rl.rlim_max == RLIM_INFINITY)rl.rlim_max = 1024;for(i = 0; i < rl.rlim_max; i++)close(i);fd0 = open("/dev/null", O_RDWR);fd1 = dup(0);fd2 = dup(0);openlog(cmd, LOG_CONS, LOG_DAEMON);if(fd0 != 0 || fd1 != 1 || fd2 != 2){syslog(LOG_ERR, "unexpected file descriptors %d %d %d", fd0, fd1, fd2);exit(1);}
}

(1)<83>

umask函数:为进程设置文件模式创建屏蔽字,并返回之前的值。

文件模式创建屏蔽字:在进程创建一个新文件或新目录时,使用文件模式创建屏蔽字。其中为1的位,表示新文件的访问权限位关闭。

文件访问权限:每个文件有9个访问权限位,分别是用户、组、其他的读、写、执行权限。

(2)<175>

int getrlimit(int resource, struct rlimit *rlptr)函数:查询进程的资源限制。

resource:指定一个资源。

RLIMIT_NOFILE:进程能打开的最多文件数。

RLIM_INFINITY:指定了一个无限量的限制。

struct rlimit{

rlim_t rlim_cur;//软限制:当前限制

rlim_t rlim_max;//硬限制:当前限制的最大值

}

(3)<278>

int sigaction(int signo, const struct sigaction *restrict act, struct sigaction *restrict oact )函数:检查或修改与指定信号相关联的处理动作。

signo:要检查或修改其具体动作的信号编号。SIGHUP<253>:

act:要修改的动作。

oact:返回该信号的上一个动作。

struct sigaction

sa_handler:信号捕捉函数的地址,或,SIG_IGN(向内核表示忽略此信号),SIG_DFL(接到此信号后的动作是系统默认动作)

sa_mask:信号集,在调用信号处理程序时阻塞某些信号。

sa_flags:指定对信号处理的各个选项。

(4)<273>

sigemptyset函数:初试化指定的信号集,清除其中所有信号。必须使用此函数,不能保证act.sa_mask = 0会做同样的事。

信号集:一种数据类型,可用于告诉内核不该发生该信号集中的信号。

(5)<63>

dup函数:复制一个现有的文件描述符,返回的新文件描述符一定是当前可用文件描述符中的最小数值。

open函数:

O_RDWR:读写打开。

(5)<378>(待看

守护进程有集中的出错记录设施。

openlog函数:

syslog函数:

(6)<235>

setsid函数:建立一个新会话。

子进程一定不是一个进程组的组长,则创建一个新会话,发生3件事:

(1)该进程变成新会话的会话首进程,且是新会话中的唯一进程。

(2)该进程成为一个新进程组的组长进程。

(3)该进程没有控制终端。

会话:一个或多个进程组的集合。

进程组:一个或多个进程的集合。同一进程组中的各个进程接收来自同一终端的各种信号。每个进程组有一个组长进程,其进程ID=进程组ID。

会话首进程:创建该会话的进程。

转载于:https://my.oschina.net/u/2463708/blog/509067

APUE学习笔记-守护进程的创建相关推荐

  1. python学习笔记——守护进程

    1 基本描述 守护进程:是系统中独立的后台服务进程, 特点:独立与终端并且周期性地执行某个任务,其生命周期长,一般随系统启动和终止. 缺点:进程的创建和销毁的时候需要消耗较多的计算机资源. 2 参考 ...

  2. 迅为嵌入式Linux学习笔记4——进程

    迅为嵌入式Linux学习笔记4--进程 进程指的是正在运行的程序,是操作系统分配资源的最小单位. 进程ID 每个进程都有唯一的标识符,这个标识符就是进程ID,简称pid 进程间通信的方法 管道通信:分 ...

  3. 浅析Linux守护进程、守护进程的创建步骤

    文章目录 何为守护进程 进程组 / 组长进程 / 会话 / 会话首进程 进程组 会话 程序示例 守护进程的创建步骤 创建守护进程程序示例 何为守护进程 守护进程(daemon)是一类在后台运行的特殊进 ...

  4. Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度 Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quar

    Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度 Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quartz ...

  5. 守护进程的创建方法和步骤

    概念:      守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.Linux的大多数服务器就是用守护进 ...

  6. V-rep学习笔记:机器人模型创建2—添加关节

    下面接着之前经过简化并调整好视觉效果的模型继续工作流,为了使模型能受控制运动起来必须在合适的位置上添加相应的运动副/关节.一般情况下我们可以查阅手册或根据设计图纸获得这些关节的准确位置和姿态,知道这些 ...

  7. Linux系统编程之--守护进程的创建和详解【转】

    本文转载自:http://www.cnblogs.com/mickole/p/3188321.html 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终 ...

  8. Linux守护进程的创建(结合nginx框架)

    Linux守护进程的创建(结合nginx框架) 先介绍几个相关函数: int dup2(arg1,arg2):参数一指向的内容赋给参数二,shi的参数二也能访问参数一所指向的内容,并返回新的描述符 i ...

  9. linux系统管理学习笔记之八---进程与作业的管理

    linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

最新文章

  1. java jdk 1.8 配置_Java开发环境jdk 1.8安装配置方法(Win7 64位系统/windows server 2008)...
  2. 图解YARN--大数据平台技术栈17
  3. php 经纬度 摩卡 转换,WGS84经纬度坐标与WEB摩卡托坐标转换
  4. MyBatis实现与插件开发
  5. Mongodb的安装部署
  6. 《Python Cookbook 3rd》笔记(1.16):过滤序列元素
  7. 【java笔记】网络编程概述
  8. java多线程编程核心技术 2
  9. 前景检测算法(十一)--基于LBP纹理
  10. Android学习之路
  11. breakall lisp文件_CAD导入草图大师后自动成面
  12. 【visio】visio软件安装
  13. 大数据时代保护个人信息安全该采取什么措施?
  14. 奇迹服务器gs无响应,奇迹gs远程连接服务器
  15. 花式二维码生成,提供了 6 种样式
  16. Error: This attribute must be localized. 解决方法
  17. libsvm嵌入式移植
  18. 30.Android调试-连接夜深模拟器
  19. 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “stdafx.h“”?
  20. TI毫米波雷达AWR1642测试

热门文章

  1. php mongodb长连接吗,PHP - MongoDB连接攻略
  2. python面向对象作业_面向对象作业
  3. python3.3psutil模块安装_详解Python3.6安装psutil模块和功能简介
  4. python抓取疫情数据_python 爬取疫情数据
  5. 2008服务器修改ipv4,Windows 2008/2012/2016如何添加配置多IP
  6. 数据库修改服务器ip地址吗,服务器数据库与改ip地址吗
  7. Tuple and Tie
  8. 25留数及其应用(一)
  9. java实现画布上画图
  10. 学NLP不懂这个项目?快别去秋招了,你HOLD不住的!