0

0

Linux如何查看后台运行的任务

P粉602998670

P粉602998670

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

|

365人浏览过

|

来源于php中文网

原创

查看Linux后台任务需根据场景选择命令:jobs查看当前终端的后台任务,ps aux或ps -ef查看系统所有进程,top/htop实时监控资源占用,systemctl管理服务。jobs仅显示当前会话任务,ps可查看全局进程但需注意权限、关键词匹配及任务是否已结束。后台任务生命周期受终端影响,可用nohup或screen避免终端关闭导致中断。除查看外,还可通过kill、killall终止进程,bg/fg暂停恢复任务,nice/renice调整优先级,结合htop、iotop等工具监控资源使用,实现对后台任务的有效管理。

linux如何查看后台运行的任务

在Linux系统里,查看后台运行的任务,核心就是利用几个不同的工具来获取信息,具体用哪个取决于你想看什么层面的“后台”。可能是当前终端会话里挂起的任务,也可能是系统层面正在运行的守护进程或任何程序。通常我们会用到

ps
jobs
top
/
htop
甚至
systemctl
这些命令,它们各有侧重,能帮你从不同角度洞察系统背后的活动。

解决方案

要查看Linux后台运行的任务,主要有以下几种方法,它们适用于不同的场景:

  1. 查看当前Shell的后台任务 (

    jobs
    ) 如果你在当前终端会话中启动了一个命令,并用
    &
    符号将其放到后台,或者使用
    Ctrl+Z
    暂停后用
    bg
    命令将其转为后台运行,那么
    jobs
    命令就是你的首选。

    • jobs
      :列出当前shell中所有后台运行或暂停的任务。
    • jobs -l
      :显示任务的PID(进程ID)。
    • 示例:
      sleep 1000 &
      然后输入
      jobs
  2. 查看系统所有进程 (

    ps
    )
    ps
    命令能显示当前系统正在运行的进程快照。这是最常用也最强大的工具之一。

    • ps aux
      :显示所有用户的进程,以用户为中心的格式。
    • ps -ef
      :显示所有进程,以完整格式列出,包括父进程ID (PPID)。
    • 结合
      grep
      过滤:
      ps aux | grep nginx
      可以查找特定名称的进程。
    • 示例:
      ps -ef | grep python
      来查找所有Python相关的进程。
  3. 实时监控进程 (

    top
    htop
    )
    当你想实时查看进程的CPU、内存占用等资源情况时,
    top
    htop
    是不二之选。

    • top
      :Linux自带,提供一个动态更新的视图,显示CPU、内存使用情况以及按资源占用排序的进程列表。
    • htop
      :一个更高级、交互性更强的
      top
      替代品,通常需要额外安装 (
      sudo apt install htop
      sudo yum install htop
      )。它提供了更友好的界面,可以方便地排序、过滤和发送信号。
  4. 查看系统服务 (

    systemctl
    ) 对于那些作为系统服务(daemon)运行的后台任务,特别是基于Systemd的系统(如Ubuntu 16.04+,CentOS 7+),
    systemctl
    是管理和查看它们状态的主要工具。

    • systemctl list-units --type=service --state=running
      :列出所有正在运行的服务。
    • systemctl status 
      :查看特定服务的详细状态,例如
      systemctl status nginx

如何区分前台任务与后台任务,以及它们在系统中的生命周期?

说起前台和后台任务,这其实是Linux终端里一个挺基础但又容易混淆的概念。简单来说,前台任务就是你直接在终端里敲命令,然后这个命令会占用你的终端,直到它执行完毕或者你手动中断(比如

Ctrl+C
)。你没法在它运行时输入其他命令,它会直接把结果输出到你的屏幕上。

后台任务呢,就是那些在终端里启动后,不会占用你当前终端的任务。你可以在它运行的同时继续输入其他命令,做别的事情。它们通常会在后台默默执行,不会直接输出到你的屏幕,或者把输出重定向到文件。

它们的生命周期,其实有点意思。一个前台任务,如果它是个短命令,执行完就结束了。但如果是个需要长时间运行的任务,比如一个数据处理脚本,你可能不希望它一直霸占你的终端。这时候,你可以:

  1. 在启动时就把它放到后台:
    your_command &
    。这样它一开始就是后台任务。
  2. 如果一个前台任务正在运行,你突然想把它放到后台,可以先按
    Ctrl+Z
    暂停它,然后输入
    bg
    命令(background的缩写),它就会继续在后台运行。
  3. 反过来,如果一个后台任务你想让它回到前台,用
    fg
    命令(foreground的缩写),通常是
    fg %1
    这样的形式,
    %1
    指的是
    jobs
    命令里显示的第一个任务。

后台任务的生命周期还有一个关键点,就是终端会话的关联性。如果你直接用

your_command &
启动一个后台任务,然后关闭了你的终端,这个任务很可能会收到
SIGHUP
信号而终止。这是因为默认情况下,后台进程仍然是终端会话的子进程,当父进程(终端)退出时,会尝试终止子进程。为了避免这种情况,我们通常会用
nohup your_command &
来启动,或者使用
screen
tmux
这样的终端复用工具,这样即使你关闭了当前的SSH连接,任务也能继续运行。至于系统级别的服务,也就是我们常说的守护进程(daemon),它们是独立于任何终端会话运行的,由
systemd
或其他初始化系统管理,它们的生命周期与系统启动和关闭紧密关联,不会因为你关闭终端而停止。理解这一点,对于长时间运行的服务器程序部署至关重要。

为什么我用
ps
看不到所有后台任务,是不是哪里搞错了?

这确实是一个初学者经常会遇到的困惑,我刚开始接触Linux的时候也纳闷过。明明我后台启动了一个脚本,用

ps aux
却找不到,或者找到的进程信息跟我想象的不太一样。其实,这并不是
ps
命令有问题,而是我们对“后台任务”的理解,以及
ps
命令的过滤方式可能存在一些误区。

首先,

ps
命令是用来查看系统所有进程的快照,它不会区分哪些是“前台”哪些是“后台”任务,它只关心进程是否存在、状态如何。所以,如果你看不到某个后台任务,可能有以下几个原因:

ASP.NET 4.0电子商城
ASP.NET 4.0电子商城

在现实生活中的购物过程,购物者需要先到商场,找到指定的产品柜台下,查看产品实体以及标价信息,如果产品合适,就将该产品放到购物车中,到收款处付款结算。电子商务网站通过虚拟网页的形式在计算机上摸拟了整个过程,首先电子商务设计人员将产品信息分类显示在网页上,用户查看网页上的产品信息,当用户看到了中意的产品后,可以将该产品添加到购物车,最后使用网上支付工具进行结算,而货物将由公司通过快递等方式发送给购物者

下载
  1. 任务已经结束了:最常见的情况。你启动了一个后台任务,它可能很快就执行完了。
    ps
    只能看到当前正在运行的进程,如果任务已经完成并退出了,自然就看不到了。
  2. 权限问题:你可能没有足够的权限查看所有用户的进程。默认情况下,普通用户只能看到自己拥有的进程。如果你想查看系统上所有用户的进程,你需要使用
    sudo ps aux
    或者切换到
    root
    用户。
  3. 进程名称或命令不匹配:当你使用
    ps aux | grep <进程名>
    来查找时,如果进程的实际命令或名称与你
    grep
    的关键词不完全匹配,或者进程名在输出中被截断了,你就可能找不到。例如,一个Python脚本
    my_script.py
    运行时,你
    grep python
    可能会看到,但
    grep my_script
    可能看不到,或者看到的是
    python my_script.py
    这样的完整命令。有时候,进程名还会被系统自动简化。
  4. jobs
    ps
    区别
    jobs
    命令只列出当前终端会话中被
    &
    Ctrl+Z
    bg
    放到后台的任务。这些任务虽然是后台运行,但它们依然是当前终端会话的子进程。而
    ps
    看到的是系统全局的进程。如果你用
    nohup
    启动了一个进程,或者它是通过
    systemctl
    启动的服务,它可能就不在
    jobs
    列表里了,但
    ps
    一定能看到。
  5. 进程状态异常:有些进程可能处于僵尸(Z)状态,或者其他不活跃的状态。虽然
    ps
    也能显示这些状态,但如果你只关注“活跃”的后台任务,可能会忽略它们。

所以,当你用

ps
找不到某个后台任务时,不妨先确认任务是否真的还在运行,检查你的
grep
关键词是否足够宽泛,并尝试使用
sudo
提升权限。通常,
ps -ef | grep <关键词>
是一个比较稳妥的查找方式,因为它会显示完整的命令路径和参数,帮助你更准确地定位。

除了查看,我还能对这些后台任务做些什么?管理与控制的艺术。

仅仅能查看后台任务,那只是管理的第一步,就像你看到了厨房里有火,但不知道怎么灭火一样。真正的艺术在于,你能对这些任务进行有效的管理和控制。这包括但不限于启动、停止、暂停、恢复,甚至调整它们的优先级,确保系统资源的合理分配。

  1. 启动与终止:

    • 启动: 除了直接在命令行后面加
      &
      让它后台运行,对于长时间运行且不依赖终端的程序,我们通常会用
      nohup command &
      nohup
      确保即使你关闭了终端,进程也不会收到
      SIGHUP
      信号而终止。对于系统级别的服务,我们会用
      systemctl start 
    • 终止: 这是最常用的控制手段。
      kill 
      是你的主要武器。
      PID
      是进程的唯一标识符,你可以通过
      ps aux | grep <进程名>
      找到它。
      kill
      命令默认发送
      SIGTERM
      信号(15),请求进程优雅地退出。如果进程不响应,你可以使用
      kill -9 
      ,强制终止进程。但请注意,
      kill -9
      是一个非常强硬的手段,它不会给进程任何清理资源的机会,可能导致数据丢失或系统状态不一致,所以要慎用。如果你想终止所有同名的进程,
      killall <进程名>
      会更方便,但同样要小心,确保你没有误杀其他重要进程。
  2. 暂停与恢复:

    • 如果你想临时暂停一个前台任务,按
      Ctrl+Z
      。它会变成一个暂停的后台任务。
    • 要让暂停的任务继续在后台运行,使用
      bg
      命令。
    • 要让后台任务回到前台,使用
      fg
      命令,通常是
      fg %job_number
  3. 调整优先级:

    • 有时候,你会发现某个后台任务占用了过多的CPU资源,导致系统卡顿。这时,你可以调整它的优先级。
      nice
      命令用于在启动时设置进程的优先级,例如
      nice -n 10 your_command &
      会以较低的优先级启动。
    • 对于已经运行的进程,你可以使用
      renice  -p 
      来修改其优先级。优先级范围通常是 -20(最高优先级)到 19(最低优先级)。将一个进程的优先级调低,意味着它会更少地获得CPU时间片,从而让其他更重要的任务能够更快地执行。
  4. 资源监控:

    • 除了
      top
      htop
      ,还有很多工具可以帮助你更细致地监控后台任务的资源使用情况。例如,
      free -h
      查看内存使用,
      df -h
      查看磁盘空间,
      iostat
      iotop
      监控磁盘I/O,
      netstat
      ss
      监控网络连接和流量。这些工具能帮你判断某个后台任务是否是资源消耗的罪魁祸首。

管理后台任务,就像管理一个复杂的团队。你得知道谁在做什么,做得好不好,什么时候需要激励,什么时候需要“劝退”。理解这些命令和它们的实际作用,能够让你更自信、更高效地掌控你的Linux系统。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

769

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

639

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1305

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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号