0

0

Linux如何查看常见守护进程列表

P粉602998670

P粉602998670

发布时间:2025-09-07 08:05:01

|

738人浏览过

|

来源于php中文网

原创

答案:通过ps、systemctl、top/htop可查看Linux守护进程,其中systemctl list-units --type=service列出所有服务,ps aux或ps -ef可查看进程详情,htop实时监控资源占用;守护进程独立于终端运行,由系统启动并持续提供后台服务,而普通进程依赖用户会话;使用systemctl start/stop/restart可管理服务,enable/disable设置开机自启;通过systemctl status和journalctl -u查看状态与日志,日志通常位于/var/log或由systemd-journald统一管理。

linux如何查看常见守护进程列表

在Linux系统里,想知道有哪些守护进程在默默工作,其实主要就那么几板斧:

ps
命令是基础,能列出所有进程;
systemctl
则更专注于服务(也就是现代系统里守护进程的载体);而像
top
htop
这种实时监控工具,则能让你动态地观察它们。理解这些工具,就能帮你快速摸清系统后台的运行状况。

解决方案

要查看Linux系统中的常见守护进程列表,我们可以结合使用几个核心工具,各有侧重。

首先,最直接也最常用的就是

ps
命令。它能提供当前系统运行进程的快照。

  • ps aux
    :这个命令会显示所有用户的进程,包括没有控制终端的进程。守护进程通常就是这类。
    a
    代表所有进程(all processes),
    u
    代表以用户为导向的格式(user-oriented format),
    x
    代表显示没有控制终端的进程。
  • ps -ef
    :这是另一个非常流行的组合,显示所有进程(
    e
    代表所有进程),并以全格式(
    f
    代表full format)显示。它会显示进程的PID、PPID(父进程ID)、C(CPU利用率)、STIME(启动时间)、TTY(控制终端)、TIME(CPU时间)、CMD(命令)。 通过这两个命令,你可以看到大量进程,其中那些TTY列显示为
    ?
    或者没有TTY的,且通常由
    root
    用户运行、进程名以
    d
    结尾(如
    sshd
    crond
    )或明显是服务名称的,很可能就是守护进程。

当然,光看

ps
输出有点大海捞针的感觉。我们通常会结合
grep
进行过滤。

  • 比如,想找所有运行的服务:
    ps aux | grep "d$" | grep -v "grep"
    (这里
    "d$"
    是一个简单的正则匹配,查找以
    d
    结尾的进程名,虽然不完美,但能筛掉很多非守护进程)。
  • 或者,如果你知道某个服务名,直接
    ps aux | grep sshd

其次,对于现代Linux系统(如使用systemd的发行版,如Ubuntu 16.04+、CentOS 7+),

systemctl
是管理和查看服务(守护进程)的首选工具。

  • systemctl list-units --type=service
    :这个命令会列出所有当前加载的、类型为“服务”的单元。这里显示的“服务”就是我们通常所说的守护进程。它会告诉你服务是否加载、是否活跃、是否启用等状态。
  • systemctl status <服务名>
    :如果你想查看某个特定守护进程的详细状态,比如
    sshd
    ,就运行
    systemctl status sshd
    。它会告诉你进程ID、内存使用、最近的日志消息等。

最后,如果你需要实时监控,

top
htop
是不错的选择。它们会动态显示CPU、内存占用最高的进程。守护进程作为系统核心服务,往往会出现在这里。

  • top
    :进入交互界面后,按
    M
    按内存排序,按
    P
    按CPU排序。你可以观察到哪些进程长时间运行且占用资源。
  • htop
    htop
    top
    的增强版,界面更友好,功能更强大。你可以方便地过滤、搜索进程,查看进程树等。

通常,我会先用

systemctl list-units --type=service
快速浏览一下系统有哪些已注册的服务,然后对感兴趣的或者看起来不熟悉的服务,再用
systemctl status <服务名>
深入了解。如果需要排查性能问题,
htop
则是我的首选。

Linux守护进程与普通进程有什么本质区别?

Linux系统中的守护进程(Daemon)和普通进程,从表面上看都是在运行的程序,但它们的“生活方式”和“职责”却有着根本的不同。我个人觉得,最核心的区别在于它们与“用户”和“终端”的关联性。

普通进程,通常是我们直接在终端里敲命令启动的,或者通过图形界面点击图标运行的程序。它们往往与一个控制终端(TTY)绑定,会接收来自这个终端的输入,也可能将输出打印到这个终端上。当这个终端关闭时,或者启动它的用户注销时,这些普通进程往往也会随之终止。它们是为特定用户在特定会话中提供服务的。比如你打开一个文本编辑器,或者运行一个

ls
命令,这些都是普通进程。

而守护进程,顾名思义,它就像一个“守护者”,默默地在后台运行,不依赖任何终端。它的主要任务是提供系统级别的服务,比如网络服务(SSH、HTTP)、定时任务(cron)、日志记录(syslog)等等。它们通常在系统启动时由

init
(或现代系统中的
systemd
)进程启动,并且会一直运行,直到系统关机。守护进程通常会脱离控制终端,成为后台进程组的领导者,并且它们的父进程往往是
init
(PID 1)或者
systemd
。它们不与任何特定用户会话绑定,即使所有用户都注销了,它们依然会继续运行,确保系统服务的连续性。这种“无头”运行的特性,是它们最显著的标志。

从技术实现上讲,守护进程在启动时会经历一系列步骤,比如调用

fork()
创建子进程,然后父进程退出,让子进程脱离父进程的控制;接着调用
setsid()
创建新的会话,成为新会话的领导者,从而脱离控制终端;还会改变工作目录到根目录,关闭标准输入、输出、错误文件描述符,并将它们重定向到
/dev/null
,以避免与终端交互。这些操作都是为了确保它们能够独立、稳定地在后台运行,不被用户会话的生命周期所影响。

如何启动、停止和重启Linux守护进程?

管理Linux守护进程,特别是那些由

systemd
管理的服务,其实非常直观。我个人觉得,
systemctl
命令简直就是系统管理员的瑞士军刀,它统一了过去分散的服务管理方式,让操作变得简单高效。

要启动一个守护进程(服务),我们使用

systemctl start
命令。比如,如果你想启动SSH服务:

sudo systemctl start sshd

这个命令会尝试启动

sshd
服务。如果服务启动成功,通常不会有任何输出。如果启动失败,
systemctl
会给出错误信息,你可以用
systemctl status sshd
查看更详细的日志。

停止一个正在运行的守护进程,则用

systemctl stop

sudo systemctl stop sshd

同样,成功无输出,失败有提示。停止服务后,它将不再提供相应的功能。

蕉点AI
蕉点AI

AI电商商品图生成平台 | 智能商品素材制作工具

下载

重启一个守护进程,通常是为了应用配置更改或者解决一些临时问题,使用

systemctl restart

sudo systemctl restart sshd

restart
命令的优点在于,它会先尝试停止服务,然后再启动。如果服务本身支持“热重载”(无需完全停止即可加载新配置),
systemctl
也提供了
reload
命令,这通常比
restart
更平滑,对正在使用的服务影响更小:

sudo systemctl reload sshd

但并非所有服务都支持

reload
,如果不支持,
reload
命令可能会失败或者实际上执行了
restart

除了这些即时操作,守护进程的“开机自启”设置也很重要。

  • 要让一个服务在系统启动时自动运行,使用
    systemctl enable
    sudo systemctl enable sshd

    这会在系统启动时创建一个符号链接,指向服务的单元文件,从而实现开机自启。

  • 如果不想让某个服务开机自启,但又不想停止它当前运行的实例,使用
    systemctl disable
    sudo systemctl disable sshd

    这会移除开机自启的符号链接。

在执行这些操作时,通常需要

root
权限,所以前面都加了
sudo
。这些命令的逻辑非常清晰,记住它们就能应对绝大多数守护进程的管理需求了。

查看守护进程的运行状态和日志文件位置

了解一个守护进程的运行状态和它的日志,是排查问题、监控系统健康的关键。我个人觉得,

systemctl status
journalctl
是这方面的黄金组合,它们能提供非常详尽的信息。

首先,要快速查看一个守护进程的当前运行状态,

systemctl status
是你的首选:

systemctl status <服务名>

例如,查看SSH服务的状态:

systemctl status sshd

这个命令的输出会非常丰富,它通常会告诉你:

  • Load: 服务单元文件是否被加载,以及加载状态。
  • Active: 服务当前是否正在运行(active (running)),或者是否处于其他状态(如inactive (dead)、failed)。
  • PID: 如果服务正在运行,会显示其主进程ID。
  • Memory: 服务占用的内存情况。
  • CGroup: 服务所属的控制组信息。
  • Logs: 最重要的部分之一,它会直接显示该服务最近的一些日志条目。这省去了你手动去翻日志文件的麻烦。

这些信息对于快速诊断服务是否正常工作至关重要。如果服务处于

failed
状态,日志部分通常会直接给出失败的原因。

至于守护进程的日志文件位置,这确实是一个稍微复杂一点的问题,因为不同的守护进程可能会将日志记录到不同的地方。但总的来说,有几个常见的位置和方式:

  1. Systemd Journal (推荐): 对于现代Linux系统,大多数守护进程的日志都会被

    systemd-journald
    服务统一收集和管理。这意味着你可以使用
    journalctl
    命令来查看它们,而无需关心具体的日志文件路径。

    • 查看特定服务的日志:
      journalctl -u <服务名>

      例如,查看SSH服务的日志:

      journalctl -u sshd
    • 查看最近的日志:
      journalctl -f
      (实时跟踪日志)。
    • 查看特定时间范围的日志:
      journalctl --since "2 hours ago"
      journalctl
      的强大之处在于,它能帮你过滤、搜索日志,而且日志是结构化的,非常便于分析。
  2. 传统日志文件 (

    /var/log
    ):
    systemd
    普及之前,或者对于一些仍然使用传统日志方式的守护进程,它们会将日志写入
    /var/log
    目录下的特定文件。

    • /var/log/messages
      /var/log/syslog
      :
      这些是系统通用日志文件,许多守护进程的非特定日志信息可能会出现在这里。具体文件名取决于你的Linux发行版。
    • 特定服务日志: 很多大型服务都有自己的日志目录或文件。例如:
      • Apache HTTP Server的访问日志和错误日志通常在
        /var/log/apache2/
        /var/log/httpd/
        目录下。
      • Nginx的日志在
        /var/log/nginx/
      • MySQL/MariaDB的错误日志通常在
        /var/log/mysql/
        /var/log/mariadb/
        下。
      • 认证相关的日志(如SSH登录尝试)可能会在
        /var/log/auth.log
        /var/log/secure
        。 要找到这些日志,通常需要查看服务的配置文件(例如,Apache的
        httpd.conf
        ,Nginx的
        nginx.conf
        )来确定其日志路径。

我个人的经验是,总是先尝试

systemctl status
journalctl -u
。如果这些工具没有提供足够的信息,或者是在一个较老的系统上,我才会去
/var/log
目录里翻找,或者查阅服务本身的文档来确定它的日志配置。这种从“新”到“旧”、从“通用”到“特定”的查找策略,通常是最有效率的。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

665

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

247

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

515

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

255

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

531

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

600

2023.08.14

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.7万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号