首页 > 运维 > linux运维 > 正文

Linux如何查看后台运行的进程列表

P粉602998670
发布: 2025-09-12 09:19:01
原创
526人浏览过
要查看Linux后台进程,首选ps aux或ps -ef查看进程快照,top和htop实现实时监控,jobs管理当前shell后台任务,结合pgrep、kill、killall等命令可精准筛选与控制进程,同时需理解僵尸、孤儿进程及守护进程特性,辅以lsof、iotop、ss、strace和systemctl等工具深入分析进程行为。

linux如何查看后台运行的进程列表

在Linux系统里,要查看后台运行的进程列表,最直接也最常用的方法就是利用

ps
登录后复制
命令,它能给我们一个当前系统进程的快照。如果需要实时动态的监控,
top
登录后复制
或更现代的
htop
登录后复制
则是更好的选择。它们就像是系统的“仪表盘”,能让你一览无余地看到哪些程序在幕后默默工作,占用了多少资源。

解决方案

要查看Linux系统中的后台进程,我通常会从几个命令入手,它们各有侧重,能满足不同的需求。

1.

ps
登录后复制
命令:进程快照

ps
登录后复制
是查看进程的基石。我个人最常用的是
ps aux
登录后复制
ps -ef
登录后复制

  • ps aux
    登录后复制
    : 这个命令会列出所有用户的所有进程。

    • a
      登录后复制
      : 显示所有终端上的进程,包括其他用户的进程。
    • u
      登录后复制
      : 以用户为中心显示进程信息(User-oriented format)。
    • x
      登录后复制
      : 显示没有控制终端的进程。 当你敲下这个命令,你会看到一个包含USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND等信息的列表。我最关注的是
      PID
      登录后复制
      (进程ID),
      %CPU
      登录后复制
      %MEM
      登录后复制
      (资源占用),以及
      COMMAND
      登录后复制
      (实际运行的命令)。有时候,
      STAT
      登录后复制
      字段也很重要,它能告诉我进程的状态,比如
      R
      登录后复制
      (运行中),
      S
      登录后复制
      (睡眠),`
      (不可中断睡眠),
      登录后复制
      Z
      (僵尸进程),
      登录后复制
      T`(停止或被追踪)。
  • ps -ef
    登录后复制
    : 另一个常用变体,以更标准化的方式显示所有进程。

    • e
      登录后复制
      : 显示所有进程。
    • f
      登录后复制
      : 以全格式(full-format)显示。 这个命令的输出列略有不同,但核心信息相似,比如UID, PID, PPID (父进程ID), C (CPU利用率), STIME (启动时间), TTY, TIME, CMD。

通常,我会结合

grep
登录后复制
来筛选特定进程,比如要找Nginx的进程:
ps aux | grep nginx
登录后复制
。这里有个小技巧,为了避免
grep
登录后复制
命令本身也被列出来,我会用
grep [n]ginx
登录后复制
,这样它只会匹配到真正的Nginx进程。

2.

top
登录后复制
命令:实时动态监控

当我想了解系统资源的实时消耗情况时,

top
登录后复制
就是我的首选。它提供了一个动态更新的视图,显示了CPU、内存、交换空间的使用情况,以及按CPU或内存占用排序的进程列表。

  • 直接在终端输入
    top
    登录后复制
    即可。
  • top
    登录后复制
    界面中,你可以按
    P
    登录后复制
    键按CPU占用率排序,按
    M
    登录后复制
    键按内存占用率排序,按
    k
    登录后复制
    键输入PID杀死进程,按
    q
    登录后复制
    键退出。 对我来说,
    top
    登录后复制
    最大的价值在于能快速定位到那些突然飙升CPU或内存的“淘气”进程。

3.

htop
登录后复制
命令:增强版
top
登录后复制

如果你的系统安装了

htop
登录后复制
,那我强烈推荐使用它。
htop
登录后复制
top
登录后复制
的一个增强版本,提供了更友好的界面,支持鼠标操作,可以水平滚动查看完整的命令,而且颜色编码让信息更易读。

  • 输入
    htop
    登录后复制
    即可启动。
  • 它提供了直观的CPU核使用率图表,以及方便的F键快捷操作,比如
    F4
    登录后复制
    进行过滤,
    F9
    登录后复制
    杀死进程。
    htop
    登录后复制
    在视觉上和操作上都比
    top
    登录后复制
    更胜一筹,特别是在需要频繁交互和筛选进程时。

4.

jobs
登录后复制
命令:当前shell的后台任务

如果你在当前shell会话中将某个命令放到后台运行(例如,

my_script.sh &
登录后复制
),那么
jobs
登录后复制
命令就能列出这些由当前shell管理的后台作业。

  • 输入
    jobs
    登录后复制
    jobs -l
    登录后复制
    jobs -l
    登录后复制
    会显示进程ID。如果你想把后台作业调回前台,可以使用
    fg %job_number
    登录后复制
    ;想再次放到后台,
    bg %job_number
    登录后复制
    。这对于管理那些你手动启动并希望在当前会话中控制的进程非常有用。
Linux如何查看后台运行的进程列表

如何筛选和管理特定用户或服务的进程?

在Linux环境下,进程的管理远不止“看一眼”那么简单,我们经常需要针对特定用户、服务或应用程序进行精细化的筛选和控制。这就像在茫茫人海中找到你的目标,然后采取相应的行动。

1. 按用户筛选进程

如果你只想看某个特定用户(比如

www-data
登录后复制
,通常是Web服务器的用户)运行的进程,
ps
登录后复制
命令可以轻松做到:

ps -u www-data
登录后复制

或者,结合

aux
登录后复制
参数,并用
grep
登录后复制
过滤,这在我的日常工作中也很常见:

ps aux | grep '^www-data'
登录后复制

注意这里的

^www-data
登录后复制
,它确保只匹配行首的
www-data
登录后复制
,避免误伤到命令中包含
www-data
登录后复制
的进程。

2. 按进程名称或PID筛选

当你知道进程的名称,但又不想看到

grep
登录后复制
本身的进程时,
pgrep
登录后复制
是一个非常优雅的工具

pgrep -l nginx
登录后复制

-l
登录后复制
选项会列出进程名称和对应的PID。这比
ps aux | grep
登录后复制
要简洁得多,也更不容易出错。

如果你已经知道进程的PID,那么直接用

ps -p PID
登录后复制
就能查看该进程的详细信息。

3. 杀死进程:

kill
登录后复制
killall
登录后复制

找到目标后,下一步往往是管理它,最常见的操作就是终止进程。

  • kill PID
    登录后复制
    : 这是最基本的命令,向指定PID的进程发送信号。默认发送的是
    SIGTERM
    登录后复制
    (信号15),告诉进程“请优雅地退出”。大多数程序都会接收这个信号并进行清理工作后退出。

  • kill -9 PID
    登录后复制
    : 如果
    kill PID
    登录后复制
    无效,进程拒绝退出,那么就需要
    kill -9
    登录后复制
    SIGKILL
    登录后复制
    (信号9)是一个强制信号,它不给进程任何清理的机会,直接将其终止。这就像是直接拔掉电源,虽然有效,但可能会导致数据丢失或文件损坏,所以通常是最后的手段。

  • killall process_name
    登录后复制
    : 当你需要杀死所有同名进程时,
    killall
    登录后复制
    就非常方便。例如,
    killall nginx
    登录后复制
    会杀死所有名为
    nginx
    登录后复制
    的进程。但要小心使用,确保你真的想终止所有这些进程。

4. 管理后台作业:

bg
登录后复制
,
fg
登录后复制
,
nohup
登录后复制
disown
登录后复制

有时,我们会在终端启动一个命令,然后意识到它会运行很久,不想占用当前终端。

千帆大模型平台
千帆大模型平台

面向企业开发者的一站式大模型开发及服务运行平台

千帆大模型平台 0
查看详情 千帆大模型平台
  • Ctrl+Z
    登录后复制
    : 将当前正在运行的命令暂停,并放到后台。
  • bg
    登录后复制
    : 将暂停的命令放到后台继续运行。例如,
    bg %1
    登录后复制
    将第一个作业放到后台。
  • fg
    登录后复制
    : 将后台运行或暂停的命令调回前台。例如,
    fg %1
    登录后复制

但这些命令只在当前shell会话中有效。一旦你关闭终端,这些后台进程也会被终止。为了让进程在终端关闭后依然运行,我们需要:

  • nohup command &
    登录后复制
    :
    nohup
    登录后复制
    (no hang up)命令会在后台运行指定命令,并且忽略SIGHUP信号(当终端关闭时发送的信号),确保进程不会因为终端关闭而停止。同时,
    &
    登录后复制
    符号将命令放到后台。输出通常会被重定向到
    nohup.out
    登录后复制
    文件。

  • disown
    登录后复制
    : 如果你已经启动了一个后台进程(例如
    my_long_task.sh &
    登录后复制
    ),但忘记用
    nohup
    登录后复制
    ,并且不想关闭终端,你可以用
    disown
    登录后复制
    命令将其与当前shell分离。

    1. my_long_task.sh &
      登录后复制
    2. jobs
      登录后复制
      (查看作业编号,例如
      [1]
      登录后复制
      )
    3. disown %1
      登录后复制
      (将作业1与shell分离) 这样,即使你关闭终端,
      my_long_task.sh
      登录后复制
      也会继续运行。

这些工具和技巧构成了我在Linux下管理进程的核心方法。理解它们,能让我更高效、更安全地控制系统资源。

Linux如何查看后台运行的进程列表

为什么有些进程在后台运行却看不到?理解僵尸进程与孤儿进程

有时候,你会发现系统资源被占用,但用

ps aux
登录后复制
命令却找不到对应的“活生生”的进程,这往往让人感到困惑。这背后可能隐藏着一些特殊的进程状态,比如僵尸进程(Zombie Processes)和孤儿进程(Orphan Processes),以及一些不那么显眼的后台守护进程。

1. 守护进程(Daemons)

很多系统服务,如Web服务器(Nginx, Apache)、数据库(MySQL, PostgreSQL)等,它们在系统启动时就会自动运行,并且通常没有关联的控制终端。它们的目的就是长时间在后台运行,提供服务。

  • 特点:通常以
    d
    登录后复制
    结尾命名(如
    httpd
    登录后复制
    ,
    sshd
    登录后复制
    ),父进程通常是
    init
    登录后复制
    (PID 1)或
    systemd
    登录后复制
  • 查看方式
    ps aux
    登录后复制
    ps -ef
    登录后复制
    可以查看到它们,只是它们通常不会显示TTY(控制终端)信息,或者显示为
    ?
    登录后复制
  • 管理:通常通过
    systemctl
    登录后复制
    命令来管理(
    systemctl start/stop/restart/status service_name
    登录后复制
    )。

2. 进程分离:

nohup
登录后复制
disown
登录后复制
的深层原因

前面提到了

nohup
登录后复制
disown
登录后复制
,它们的作用就是让进程脱离终端控制。当一个进程脱离了其启动的终端,即使终端关闭,它也不会收到SIGHUP信号而被终止。这类进程在后台运行,你仍然可以通过
ps aux
登录后复制
查到它们,只是它们的TTY列可能会显示为
?
登录后复制
pts/X
登录后复制
(如果它们是在一个伪终端中启动,然后分离的)。

3. 僵尸进程(Zombie Processes,

<defunct>
登录后复制

这是我个人在排查系统问题时,最容易让人头疼但又相对容易被忽视的一种情况。

  • 定义:一个进程在完成执行后,它的父进程未能及时调用
    wait()
    登录后复制
    waitpid()
    登录后复制
    系统调用来获取其终止状态。虽然僵尸进程已经不再执行任何代码,也不占用CPU或内存资源(除了一个PID条目和一些内核结构),但它仍然存在于进程表中,占用一个PID。
  • 识别:在
    ps aux
    登录后复制
    STAT
    登录后复制
    列中,你会看到
    Z
    登录后复制
    或者
    Z+
    登录后复制
    ,在
    COMMAND
    登录后复制
    列中,通常会显示
    <defunct>
    登录后复制
  • 危害:单个僵尸进程无害,但大量的僵尸进程会耗尽系统的PID资源,导致无法创建新的进程。这在一些设计不佳的应用程序中比较常见,尤其是父进程没有正确处理子进程退出的情况。
  • 处理:你不能直接杀死僵尸进程,因为它们已经“死了”。唯一的方法是杀死它们的父进程,这样父进程的父进程(通常是
    init
    登录后复制
    systemd
    登录后复制
    )就会接管并清理这些僵尸。所以,关键在于找到并修复产生僵尸进程的应用程序或其父进程。

4. 孤儿进程(Orphan Processes)

  • 定义:当一个父进程在它的子进程之前退出,那么这个子进程就变成了孤儿进程。
  • 处理:在Linux中,孤儿进程会被
    init
    登录后复制
    进程(PID 1)或
    systemd
    登录后复制
    (现代Linux系统中的PID 1)“收养”。
    init
    登录后复制
    进程会成为这些孤儿进程的新的父进程,并负责在它们终止时调用
    wait()
    登录后复制
    来清理它们的资源,避免它们变成僵尸进程。
  • 识别:你可以通过查看进程的PPID(父进程ID)来判断。如果一个进程的PPID是1,那么它很可能是一个孤儿进程被
    init
    登录后复制
    /
    systemd
    登录后复制
    收养了。

理解这些进程的生命周期和特殊状态,对于我们深入诊断系统行为,优化资源使用,以及排查那些看似“隐形”的问题至关重要。它们不是凭空消失,只是以我们不熟悉的方式存在或被管理着。

Linux如何查看后台运行的进程列表

除了基础命令,还有哪些高级工具或技巧能帮助我们监控进程?

虽然

ps
登录后复制
,
top
登录后复制
,
htop
登录后复制
是日常监控的利器,但在更复杂的场景下,我们可能需要更专业的工具来深入挖掘进程的行为,比如它们在做什么网络通信、访问了哪些文件、或者消耗了多少磁盘I/O。这些高级工具能帮助我们从不同的维度理解进程的“幕后故事”。

1.

lsof
登录后复制
:列出打开的文件

lsof
登录后复制
(list open files)是一个极其强大的工具,它能列出所有被进程打开的文件。在Linux中,“一切皆文件”,所以文件不仅包括普通文件,还包括网络套接字、管道、设备文件等。

  • 查看进程打开的所有文件
    lsof -p PID
    登录后复制
  • 查看所有打开网络连接的进程
    lsof -i
    登录后复制
    。这能快速定位哪些进程正在监听端口或建立网络连接。
  • 查看特定端口被哪个进程占用
    lsof -i :80
    登录后复制
    (查看80端口)。
  • 查看特定文件被哪个进程打开
    lsof /path/to/file
    登录后复制

我经常用

lsof -i :port
登录后复制
来解决“端口被占用”的问题,它能直接告诉我哪个进程占用了端口,然后我就可以决定是杀死它还是调整配置。

2.

iotop
登录后复制
:磁盘I/O监控

当系统变慢,但CPU和内存看起来正常时,磁盘I/O往往是瓶颈。

iotop
登录后复制
是一个类似于
top
登录后复制
的工具,但它专注于显示进程的磁盘I/O使用情况。

  • 直接运行
    iotop
    登录后复制
  • 它会显示每个进程的读写速度,以及总的磁盘I/O。 这对于诊断数据库服务器、文件服务器或任何I/O密集型应用程序的性能问题非常有用。

3.

netstat
登录后复制
ss
登录后复制
:网络连接与统计

netstat
登录后复制
ss
登录后复制
命令用于显示网络连接、路由表、接口统计等信息。
ss
登录后复制
netstat
登录后复制
的替代品,通常更快,并且能显示更多信息。

  • 查看所有监听端口及其关联进程
    sudo netstat -tulnp
    登录后复制
    sudo ss -tulnp
    登录后复制
    • t
      登录后复制
      : TCP连接
    • u
      登录后复制
      : UDP连接
    • l
      登录后复制
      : 监听状态
    • n
      登录后复制
      : 不解析主机名/端口名
    • P
      登录后复制
      : 显示进程ID和程序名称(需要root权限) 这个命令能快速发现是否有未知的服务在监听端口,或者某个服务是否正常启动并监听了正确的端口。

4.

strace
登录后复制
:系统调用跟踪

strace
登录后复制
是一个非常底层的调试工具,它能跟踪进程执行的系统调用和接收到的信号。这对于理解一个程序内部到底在做什么,或者为什么它会失败,是极其强大的。

  • 跟踪一个正在运行的进程
    strace -p PID
    登录后复制
  • 启动一个程序并跟踪它
    strace command_name
    登录后复制
    输出可能会非常详细和庞大,但通过
    grep
    登录后复制
    或重定向到文件进行分析,可以揭示程序访问了哪些文件、进行了哪些网络操作、或者遇到了哪些权限问题。这对于排查那些“神秘”的程序崩溃或异常行为非常有帮助。

5.

systemctl status
登录后复制
:Systemd服务的状态

对于由

systemd
登录后复制
管理的服务,
systemctl status service_name
登录后复制
是一个非常重要的命令。它不仅能告诉你服务是否在运行,还能显示其PID、内存使用、最近的日志输出以及其他相关信息。

  • systemctl status nginx.service
    登录后复制

这比直接用

ps
登录后复制
去查找服务进程要方便得多,因为它整合了服务的运行状态和日志信息,提供了一个更全面的视图。

这些高级工具在我的工作中,是解决那些通过

ps
登录后复制
top
登录后复制
无法看清的“深层”问题的关键。它们提供了更细致的洞察力,帮助我更好地理解和管理Linux系统中的进程行为。

以上就是Linux如何查看后台运行的进程列表的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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