守护进程到底是什么?如何创建?(图文并茂,你不得不看的一篇文章)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: **守护进程(Daemon Process)详解**:守护进程是后台运行的无终端关联的系统进程,常在启动时启动,提供持续服务,如网络服务、日志记录和定时任务。其特点包括脱离终端、后台运行、持久服务、资源管理和错误处理。创建守护进程涉及重定向文件描述符、创建新会话、改变工作目录等步骤。`ps` 和 `top` 命令用于查看守护进程,前者提供进程快照,后者显示实时资源使用情况。

目录

守护进程(Daemon Process)详解

守护进程的特点

创建守护进程的步骤

用守护进程实现输入Hello功能

守护进程的用途

如何查看我们的守护进程?

1. ps 命令

2. top 命令

总结


守护进程(Daemon Process)详解

守护进程,又称背景进程或系统守护进程,是运行在后台的一种特殊类型的进程。它们通常在系统启动时启动,并在系统关闭时终止。守护进程的主要功能是提供持续运行的服务,如网络服务、系统日志记录、定时任务执行等,而不与任何终端或用户直接交互。

守护进程的特点

  1. 脱离终端:守护进程在运行时不与任何终端关联,因此它们不能接收来自终端的输入或向终端输出信息。这一特性使得守护进程能够在无人值守的服务器环境中持续运行。
  2. 后台运行:守护进程在后台运行,不占用用户的交互会话,因此不会影响用户的其他操作。
  3. 持久运行:守护进程通常在系统启动时启动,并一直运行直到系统关闭。它们提供不间断的服务,如文件系统监控、网络服务、打印队列管理等。
  4. 资源管理:守护进程需要妥善管理资源,包括文件描述符、内存分配等,以确保系统资源的高效利用和避免泄漏。
  5. 错误处理与日志记录:守护进程需要能够处理运行时可能出现的错误,并将相关信息记录到日志文件中,以便于问题的诊断和追踪。

创建守护进程的步骤

创建一个守护进程通常涉及以下步骤:

  1. 重定向标准文件描述符:将标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)重定向到/dev/null或日志文件,以避免与终端的交互。
  2. 创建新会话:通过调用setsid()函数创建一个新的会话,使进程成为会话领导者,从而脱离原来的终端。
  3. 改变工作目录:通常将工作目录更改为根目录/,避免因原工作目录被卸载而导致的进程终止。
  4. 文件权限掩码设置:调用umask()设置适当的文件权限掩码,确保守护进程创建的文件具有正确的权限。
  5. 关闭不必要的文件描述符:关闭所有不需要的文件描述符,避免资源泄漏。
  6. 错误处理与日志记录:设置错误处理机制,将错误信息记录到日志文件中,便于后续分析。

image.gif 编辑

用守护进程实现输入Hello功能

image.gif 编辑

守护进程的用途

守护进程广泛应用于各种系统服务中,包括但不限于:

  • 网络服务:如Web服务器(Apache、Nginx)、邮件服务器(Postfix、Sendmail)和数据库服务器(MySQL、PostgreSQL)。
  • 系统管理:如日志记录(syslogd)、定时任务执行(cron)和系统监控(monit)。

如何查看我们的守护进程?

1. ps 命令

ps 命令用于显示当前系统中进程的快照信息。它提供了多种选项来定制输出,以满足不同的需求。

  • 基本用法ps 命令默认显示当前终端的进程信息。
  • 常用选项
  • aux:显示所有用户的所有进程的详细信息,a 表示所有进程,u 表示以用户友好的格式显示,x 表示包括没有控制终端的进程。
  • -ef:显示所有进程的详细信息,类似于 aux,但格式略有不同。
  • -C <command>:显示特定命令的进程信息。
  • -p <pid>:显示指定 PID 的进程信息。
  • -U <username>:显示特定用户的所有进程信息。

image.gif 编辑

2. top 命令

top 命令提供了一个动态的实时视图,显示系统中最消耗资源的进程。它是一个交互式的工具,允许用户实时监控 CPU、内存使用情况以及进程列表。

  • 基本用法top 命令启动后,会显示一个不断更新的进程列表,按 CPU 使用率排序。
  • 交互式功能
  • P 键按 CPU 使用率排序。
  • M 键按内存使用率排序。
  • N 键按 PID 排序。
  • q 键退出 top

image.gif 编辑

总结

  • ps 提供了静态的进程信息快照,适用于查看特定时刻的进程状态。
  • top 提供了动态的系统监控,适合实时监控系统资源和进程活动。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
存储 Linux C++
C++项目实战-多进程(一篇文章)(三)
C++项目实战-多进程(一篇文章)(三)
111 0
|
5月前
|
存储 调度 C++
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
120 1
|
5月前
|
存储 缓存 NoSQL
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
82 1
|
4月前
|
Python Windows
从菜鸟到大神:一篇文章带你彻底搞懂Python并发编程——线程篇与进程篇的深度较量!
【7月更文挑战第10天】Python并发编程对比线程与进程。线程适合IO密集型任务,利用`threading`模块,但GIL限制CPU并行。进程适用于CPU密集型任务,通过`multiprocessing`实现,独立内存空间,启动成本高。例子展示了如何创建和管理线程与进程以提高效率。选择取决于任务类型和资源需求。
32 0
|
5月前
|
Unix Linux 调度
一篇文章讲明白linux僵死进程
一篇文章讲明白linux僵死进程
45 0
|
存储 消息中间件 NoSQL
C++项目实战-多进程(一篇文章)(二)
C++项目实战-多进程(一篇文章)(二)
95 0
|
存储 算法 Shell
C++项目实战-多进程(一篇文章)(一)
C++项目实战-多进程(一篇文章)(一)
152 0
|
Unix Shell Linux
一篇文章教会你什么是Linux进程控制(下)
3.3 进程等待示例 #include <stdio.h> #include <unistd.h> #include <stdlib.h>
|
存储 消息中间件 Linux
一篇文章教会你什么是Linux进程控制(上)
进程创建 1.fork函数初识 在Linux上一篇文章进程概念详解我们提到了在linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。
|
存储 Go 调度
这篇进程和线程的文章,让我彻底觉悟了
这篇进程和线程的文章,让我彻底觉悟了