创建子进程,父进程退出
这是编写守护进程的第一步。由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象。之后的所有工作都在子进程中完成,而用户在Shell终端里则可以执行其他命令,从而在形式上做到了与控制终端的脱离。
在Linux中父进程先于子进程退出会造成子进程成为孤儿进程,而每当系统发现一个孤儿进程是,就会自动由1号进程(init)收养它,这样,原先的子进程就会变成init进程的子进程。
在子进程中创建新会话
这个步骤是创建守护进程中最重要的一步,虽然它的实现非常简单,但它的意义却非常重大。在这里使用的是系统函数setsid,在具体介绍setsid之前,首先要了解两个概念:进程组和会话期
进程组:是一个或多个进程的集合。进程组有进程组ID来唯一标识。除了进程号(PID)之外,进程组ID也是一个进程的必备属性。每个进程组都有一个组长进程,其组长进程的进程号等于进程组ID。且该进程组ID不会因组长进程的退出而受到影响。
会话周期:会话期是一个或多个进程组的集合。通常,一个会话开始与用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。
接下来就可以具体介绍setsid的相关内容:
(1)setsid函数作用:
setsid函数用于创建一个新的会话,并担任该会话组的组长。调用setsid有下面的3个作用:
让进程摆脱原会话的控制
让进程摆脱原进程组的控制
让进程摆脱原控制终端的控制
那么,在创建守护进程时为什么要调用setsid函数呢?由于创建守护进程的第一步调用了fork函数来创建子进程,再将父进程退出。由于在调用了fork函数时,子进程全盘拷贝了父进程的会话期、进程组、控制终端等,虽然父进程退出了,但会话期、进程组、控制终端等并没有改变,因此,还还不是真正意义上的独立开来,而setsid函数能够使进程完全独立出来,从而摆脱其他进程的控制。
改变当前目录为根目录
这一步也是必要的步骤。使用fork创建的子进程继承了父进程的当前工作目录。由于在进程运行中,当前目录所在的文件系统(如“/mnt/usb”)是不能卸载的,这对以后的使用会造成诸多的麻烦(比如系统由于某种原因要进入单用户模式)。因此,通常的做法是让”/”作为守护进程的当前工作目录,这样就可以避免上述的问题,当然,如有特殊需要,也可以把当前工作目录换成其他的路径,如/tmp。改变工作目录的常见函数式chdir。
重设文件权限掩码
文件权限掩码是指屏蔽掉文件权限中的对应位。比如,有个文件权限掩码是050,它就屏蔽了文件组拥有者的可读与可执行权限。由于使用fork函数新建的子进程继承了父进程的文件权限掩码,这就给该子进程使用文件带来了诸多的麻烦。因此,把文件权限掩码设置为0,可以大大增强该守护进程的灵活性。设置文件权限掩码的函数是umask。在这里,通常的使用方法为umask(0)。
关闭文件描述符
同文件权限码一样,用fork函数新建的子进程会从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读写,但它们一样消耗系统资源,而且可能导致所在的文件系统无法卸下。
linux 创建守护进程的相关知识
如何恢复linux和windows服务器被误删除文件
服务器是企业和个人重要的存储设备之一,而数据是企业和个人的珍贵财富,一旦服务器出现故障,会导致数据丢失或者受损,对公司或个人造成巨大的损失。因此,服务器备份和恢复数据备受
Tomcat服务器如何配置ssl证书
目录 一:证书配置 二:Tomcat配置 http自动跳转 https 总结一:证书配置下载已签发的证书、选择 Tomcat 版本 进入 Tomcat 目录创建个 cert 文件夹 将下载好的 SSL证书压缩包里的
CentOS修改服务器登录密码的详细指南
目录 一、引言 二、基本概念 三、修改密码的步骤 3.1 登录到 CentOS 服务器 3.2 修改当前用户的密码 3.3 修改其他用户的密码 3.4 密码复杂性检查 四、解决密码复杂性
Nginx解决跨域访问的完整实例
目录 引言 1. Nginx简介 2. 跨域问题简介 3. 解决跨域问题的方法 步骤一:安装和配置Nginx 步骤二:测试跨域访问 结论 总结 引言在现代的Web开发中,跨域访问是一种常见的
linux查看服务端证书方式(keytool和openssl)
目录 方法 1:直接从服务器上抓取并查看证书 方法 2:通过 openssl 抓取并查看证书 方法 3:下载并查看证书文件 证书信息解析 总结 查看服务器端的证书时,可以通过导入服务器
Ubuntu设置静态IP地址的方法步骤(亲测有效)
目录 一、找到位于 /etc/netplan 的 netplan 目录 二、修改或创建配置文件 三、配置与本机相符的网络适配器 四、禁用DHCP 五、配置静态IP、子网掩码、网关 六、配置DNS服务
Ubuntu配置静态IP的两种方法
目录 方法一 第一步:查看当前主机网络信息 第二步:修改配置文件 进入配置文件夹 第三步:使配置生效且检查网络连接状况 方法二 第一步:查看当前主机网络信息 第二步:修改
在LINUX系统上使用rsync命令详解
目录 LINUX使用rsync命令 Rsync 命令语法 Rsync 命令选项 Rsync 命令 命令示例 Rsync命令的基本语法 使用 Rsync 命令传输文件和目录 使用 Rsync 命令镜像数据
Linux系统中如何将普通用户权限提升至root权限
目录 首先重来就没有设置过ROOT用户 1.使用普通用户登录后输入以下命 2.设置root用户密码 3.输入“su”切换为root用户登录 4.输入“Visudo”命令
Linux解决Unknown filesystem问题
目录 Linux解决「Unknown filesystem」 遇到这种情况应该如何修复 总结Linux解决「Unknown filesystem」不知道大家在使用 Linux 系统的时候有没有遇见过 「Unknown filesys
nginx部署前端dist包详细图文教程
目录 下载nginx 配置 启动 总结 下载nginx下载地址https://nginx.org/en/download.htmldownload > Stable version 可选择稳定版的nginxnginx压缩包解压后的目录配置1.将打
VScode连接远程服务器踩坑实战记录(新版离线vscode-server安装)
目录 1、VScode扩展安装与配置 (1)vscode扩展安装 (2)vscode远程配置 2、vscode-server离线下载 (1)Commit ID查看 (2)安装包下载 3、文件解压缩 4、移动文件到指定位置
Linux系统中检查系统重启记录方案
目录 Linux中监控系统重启的重要性 深入探究:Linux 重启日志 使用last命令 uptime 命令 利用journalctl获取重启历史记录 who -b 命令 总结借其强大的架构和无与伦比的灵活性
LINUX中关于mkdir命令语法和实例解读
目录 MKDIR 命令的语法 mkdir 命令可用的选项 深入了解 MKDIR 命令示例 使用 mkdir 创建简单目录 在以其绝对功能和灵活性而闻名的 Linux 操作系统的动态世界中,有大量
Nginx 只允许 www 域名访问并禁止裸域名访问的实现步骤
目录 如何通过 Nginx 只允许 www 域名访问并禁止裸域名访问 步骤 1:配置 Nginx 处理 www 域名 步骤 2:禁止裸域名访问 步骤 3:重定向裸域名到 www 域名(可选) 步骤 4:重启 Ng
Nginx设置目录的访问权限实现访问静态资源
从日志信息来看,确实是权限问题(Permission denied)。我们可以重新检查并设置权限,确保 Nginx 用户有权限访问这些文件。检查 Nginx 用户:首先确认 Nginx 使用的用户,一般是 www-d
telnet Connection refused端口不通如何处理
目录 一、telnet简述 二、telnet Connection refused不通处理思路 一般对应上面的后两种情况 排查目的主机服务 总结 一、telnet简述telnet一般用于测试本机到目的主机
linux下图形界面和命令行界面的切换方式
目录 在linux下图形界面和命令行界面的切换 1. 图形界面和命令行界面的切换 2. 修改系统开机进入的界面 总结 在linux下图形界面和命令行界面的切换我估计好多喜欢用li
telnet nc命令返回“连接失败”问题及解决
目录 telnet nc命令返回“连接失败” 1、端口没有被监听 2、防火墙策略 3、目标主机不接受外部连接 总结 telnet nc命令返回“连接失败”当使用n
Linux无法为立即文档创建临时文件:设备上没有空间的问题解决
目录 1、问题描述 2、问题解决1、问题描述在命令行输入命令按Tab键时出现如下报错:很明显,设备上没有空间,即磁盘空间不足。通过命令查看具体情况如下:df -h2、问题解决首先想到
nginx配置history模式的使用小结
本文主要介绍了nginx配置history模式的使用小结,具体如下:worker_processes 1; events { worker_connections 1024;} http { include mime.types; default_t
Nginx获取客户端真实IP(real_ip_header)的实现
目录 一、配置 Nginx 获取客户端真实 IP 1、基本配置说明 2、set_real_ip_from详解 3、log_format 配置(参考) 二、调试与测试 三、Lua 中使用客户端真实 IP(参考) 四
Nginx配置WebSocket代理的示例代码
目录 官方文档代理样例 Linux 查看安装文件命令手册 Nginx 日志配置方案 成功解决问题–使用 Nginx 代理 WebSocket 可能出现的问题 Nginx 官方文档网址 nginx d
Linux系统下通过jar包进程号查询jar程序占用端口的常用方法
目录 方法1: 使用 netstat 命令 方法2: 使用 lsof 命令 方法3: 使用 ss 命令 方法4: 直接从Java进程读取 注意事项在Linux系统中,如果你已经知道了Java应用程序的进程ID(PID),你
linux日志轮询方案
目录 logrotate 简介 logrotate 配置文件 日志回滚原理 sshd 日志回滚实战 修改配置文件 重启rsyslog 强制切割 测试和运行 logrotate debug 模式 v
Linux自带的logrotate管理日志用法
目录 利用Linux自带的logrotate管理日志 1. logrotate简介 2. logrotate配置参数 3. nginx日志切割实例 4. 其他配置示例 总结 利用Linux自带的logrotate管理日志日
使用wget递归下载目录内容
是一种常见的命令行工具,用于从远程服务器下载整个目录及其子目录中的文件。它可以通过递归方式下载目录中的所有文件,并保持目录结构的完整性。wget是一个开源的非交互式命令
linux如何开启关闭防火墙
目录 linux开启关闭防火墙 1.关闭防火墙 2.设置开机不启动 3.查看防火墙状态 不同系统常见防火墙相关命令 下面是red hat/CentOs7关闭防火墙的命令 firewalld 总结
Nginx实现404页面的配置方法的两种方法
目录 第一种:Nginx自己的错误页面 第二种:反向代理的错误页面一个网站项目,肯定是避免不了404页面的,通常使用Nginx作为Web服务器时,有以下集中配置方式,一起来看看。第一种:Nginx
nginx出现500 Internal Server Error错误的解决方法
目录 问题原因 解决方法 1. 查看 Nginx 错误日志 2. 检查 Nginx 配置文件 3. 检查应用程序日志 4. 检查文件权限 5. 检查后端服务 示例 Nginx 配置检查步骤 检查步