0

0

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

P粉602998670

P粉602998670

发布时间:2025-09-12 09:19:01

|

605人浏览过

|

来源于php中文网

原创

要查看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

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

ASP.NET 4.0电子商城
ASP.NET 4.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,

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

  • 定义:一个进程在完成执行后,它的父进程未能及时调用
    wait()
    waitpid()
    系统调用来获取其终止状态。虽然僵尸进程已经不再执行任何代码,也不占用CPU或内存资源(除了一个PID条目和一些内核结构),但它仍然存在于进程表中,占用一个PID。
  • 识别:在
    ps aux
    STAT
    列中,你会看到
    Z
    或者
    Z+
    ,在
    COMMAND
    列中,通常会显示
  • 危害:单个僵尸进程无害,但大量的僵尸进程会耗尽系统的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系统中的进程行为。

相关专题

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

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

664

2023.06.20

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

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

246

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中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

530

2023.08.11

mysql忘记密码
mysql忘记密码

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

599

2023.08.14

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.21

热门下载

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

精品课程

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

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

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

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