Linux进程管理实战指南:实用工具命令详解

前言

这是一篇深度剖析Linux系统进程管理的技术文章,详细介绍了各种进程管理相关命令的用法和示例。通过本文,你将掌握从基础到高级的进程管理技巧,了解如何利用命令行工具高效处理进程、提升系统性能。无论你是初学者还是经验丰富的管理员,本文都将为你带来实用而宝贵的知识,助力你在Linux系统中轻松应对各类进程管理挑战。立即阅读,发现Linux进程管理的奥秘!

进程管理命令

ps

ps是一个常用的Linux命令,用于查看当前系统中正在运行的进程信息。

css 复制代码
ps [options]

常用的ps命令选项包括:

  • -a:显示所有用户的所有进程,包括其他用户的进程。
  • -u:以用户为基础显示进程信息,包括进程的用户名、进程ID(PID)、CPU使用率、内存使用率等。
  • -x:显示没有控制终端的进程。
  • -e:显示所有正在运行的进程。
  • -f:以全格式显示进程信息,包括进程ID(PID)、父进程ID(PPID)、进程状态等。
  • -l:以长格式显示进程信息,包括进程ID(PID)、进程所属用户、CPU使用率等。

ps指令可以搭配不同的选项来获取不同的进程信息。下面是一些常用的选项:

显示所有用户的所有进程信息,包括进程ID(PID)、CPU使用率、内存使用率等

ps -aux

显示所有进程的详细信息,包括进程ID(PID)、父进程ID(PPID)、进程状态等。

ps -ef

显示所有正在运行的进程。

ps -e

查询redis的进程信息,包括进程ID(PID)、CPU使用率、内存使用率等

perl 复制代码
ps -aux | grep redis

输出了两行信息,这两行信息分别是什么意思呢?

  • 第一行:进程名称:redis;进程ID:1054;CPU使用率:0.9;内存使用率:0.3;内存占用量:143056 KB;虚拟内存占用量:5812 KB;进程状态:?;运行优先级和调度策略:Ssl;启动时间:15:45;运行时间:1小时6分钟;可执行文件路径和参数:/usr/bin/redis-server 0.0.0.0:6379;
  • 第二行:进程所有者:root;进程ID:1939;CPU使用率:0.0;内存使用率:0.0;内存占用量:112824 KB;虚拟内存占用量:988 KB;终端:pts/0;进程状态:S+;启动时间:17:44;运行时间:0小时0分钟;可执行文件路径和参数:grep --color=auto redis;

以长格式显示进程信息,包括进程ID(PID)、进程所属用户、CPU使用率等。

ps -l

这里需要注意的是ps -l 并不显示所有进程,而是显示与当前终端(TTY)相关的进程。如果你希望看到所有进程,可以使用 ps aux 或 ps -le

top

top命令是Linux中常用的性能监控工具,它可以实时显示系统中各个进程的资源占用状况,包括CPU、内存等。top命令提供了一个实时的视图,显示系统当前的活跃进程,并允许用户进行交互,对进程执行各种操作。

基本语法:

css 复制代码
top [options]

常用可选参数:

  • -d:指定刷新间隔,单位为秒。
  • -p:监控特定的PID。
  • -n:运行top命令时显示几次更新后退出。
  • -u:仅显示特定用户的进程。
  • -h:显示帮助信息。
  • -o:按某一字段排序,例如-o %MEM按内存使用率排序。

执行top命令后,实际上也可以执行一些交互命令:

  • Shift + P:按CPU使用率排序。
  • Shift + M:按内存使用率排序。
  • k:终止一个进程。
  • f:添加或删除显示的列。
  • t:打开或关闭显示图形。
  • 1:显示所有CPU的状况,而不是总体平均值。

比如:我要杀死进程ip是10789的vsftpd服务进程,可以直接输入k,会进入下面的交互界面,再输入vsftpd进程的进程id10789,按enter键,即可杀死vsftpd服务进程;

下面是其他的一些简单使用示例:

简单启动:直接在终端中输入 top,就可以显示当前系统的动态进程以及资源使用情况。

css 复制代码
top

改变更新速率:使用 top -d 5 来设定每5秒刷新一次。

css 复制代码
top -d 5

监控特定进程:假设要监控PID为10789的进程,可以使用 top -p 10789。

top -p 10789

查看特定用户的进程:如果需要查看用户root的进程,可以使用 top -u root。

top -u root

htop

htop 是一个类似于 Linux 系统中的 top 命令的工具,用于显示系统中运行的进程的实时信息。与 top 不同的是,htop 提供了更加直观和友好的界面,可以通过鼠标或键盘快捷键进行交互操作,显示的信息也更加详细和易读。htop 可以显示 CPU、内存、swap 等资源的使用情况,同时还可以方便地对进程进行排序、搜索和管理。

htop 并不是所有 Linux 发行版的默认安装包,因此可能需要单独安装它。可以按照以下步骤在常见的 Linux 发行版上安装 htop:

对于 Ubuntu 或 Debian 等基于 apt 的系统:

sql 复制代码
sudo apt update sudo 
apt install htop

对于 CentOS 或 RHEL 等基于 yum 的系统:

sudo yum install htop

一旦安装完成,就可以直接使用了。

使用 htop的方法很简单:

打开终端窗口输入 htop 命令,并按下 Enter 键

htop

然后就可以看到如上图的输出内容:实时进程信息,包括 CPU 和内存的占用情况等。

还可以使用键盘快捷键进行操作:你可以使用键盘上的不同按键来进行排序、筛选和管理进程。例如:

  • 使用 ↑ 和 ↓ 键来上下移动光标选择进程。
  • 使用 F6 键可以根据不同的标准对进程进行排序。
  • 使用 F9 键可以选择发送信号给选定的进程。
  • 使用 Space 键可以选中或取消选中进程。
  • 使用 q 键可以退出 htop。

pgrep

pgrep 命令用于根据进程的名称或其他属性查找正在运行的进程,并返回与之匹配的进程ID(PID)。

pgrep 的基本语法如下:

css 复制代码
pgrep [options] <pattern>

其中, 是用于匹配进程的模式。可以是进程名称、进程命令行参数或其他进程属性。

以下是一些常用的选项:

  • -u :指定进程所属的用户名。
  • -x:精确匹配整个进程命令行。
  • -d :使用自定义分隔符来分隔多个 PID。
  • -n:仅显示最新创建的进程。
  • -o :指定输出格式。常见的格式包括进程ID(%p)、父进程ID(%P)、进程名称(%n)等。

例如,要查找所有以 "nginx" 开头的进程,可以使用以下命令:

pgrep nginx

如果要限制搜索特定用户的进程,可以使用 -u 选项:

pgrep -u username nginx

pgrep 命令非常有用,可以快速查找和操作正在运行的进程。它通常与其他命令(如 kill)结合使用,以对匹配的进程进行进一步操作。

kill

kill 命令用于终止正在运行的进程。

kill 命令的基本语法如下:

bash 复制代码
kill [options] <PID>

其中, 是要终止的进程的进程ID。

最常用的用法是:例如,要终止进程ID为 12345 的进程,可以使用以下命令:

bash 复制代码
kill 12345

pkill

pkill 命令用于根据进程的名称或其他属性发送信号给进程,从而终止或操作匹配的进程。

pkill 的基本语法如下:

css 复制代码
pkill [options] <pattern>

其中, 是用于匹配进程的模式。可以是进程名称、进程命令行参数或其他进程属性。

以下是一些常用的选项:

  • -u :指定要匹配的进程所属的用户名。
  • -x:精确匹配整个进程命令行。
  • -n:仅发送信号给最新创建的进程。
  • -signal :指定要发送的信号,默认为 SIGTERM。
  • -l:显示可用的信号列表。

例如,要终止所有名为 "nginx" 的进程,可以使用以下命令:

markdown 复制代码
    pkill nginx

如果要限制操作特定用户的进程,可以使用 -u 选项:

markdown 复制代码
    pkill -u username nginx

pkill 命令与 pgrep 命令结合使用,可以方便地查找并终止匹配的进程。不过个人感觉,还是根据进程id,使用kill命令杀死指定进程,会更稳妥一点。

systemctl

systemctl 命令是一个在大多数现代 Linux 发行版中用于管理系统服务的工具。它可以启动、停止、重启、启用或禁用系统服务,还可以显示服务的状态和控制服务的启动顺序等。

以下是一些常用的 systemctl 命令以及其作用:

启动一个系统服务

markdown 复制代码
    systemctl start <service-name>

停止一个系统服务

arduino 复制代码
    systemctl stop <service-name>

重启一个系统服务。

markdown 复制代码
    systemctl restart <service-name>

显示一个系统服务的状态信息。

lua 复制代码
    systemctl status <service-name>

设置一个系统服务在系统启动时自动启用。

bash 复制代码
    systemctl enable <service-name>

设置一个系统服务在系统启动时不自动启用。

bash 复制代码
    systemctl disable <service-name>

列出当前正在运行的所有系统服务

ini 复制代码
    systemctl list-units --type=service

重新加载 systemd 管理的服务单元配置。

markdown 复制代码
    systemctl daemon-reload

这些命令使得对系统服务进行管理变得非常方便。通过 systemctl,你可以轻松地管理系统中的各种服务,确保它们按照你的期望进行启动、停止和管理。

通常情况下,通过标准的软件包管理工具(例如 apt、yum、dnf 等)安装的软件,都会在系统中注册为服务,并且可以通过 systemctl 来进行管理。这些软件通常会在安装时创建相应的服务单元文件,以便 systemd(系统初始化系统和服务管理器)能够管理它们。

然而,某些情况下可能存在无法通过 systemctl 管理的软件,例如:

  • 手动安装的软件:如果你手动编译并安装了某个软件,但没有为其创建 systemd 服务单元文件,那么这个软件就不会被 systemd 所管理,因此无法使用 systemctl 来对其进行管理。
  • 自定义安装路径:有些软件可能会被安装到非标准的路径,或者安装路径不在 systemd 默认的服务搜索路径中,这样 systemd 就无法正确识别这些软件并管理其服务。

在这些情况下,你可能需要手动创建一个 systemd 服务单元文件,以便让 systemd 能够管理这些软件。创建systemd服务单元的方法只需要简单的三步:

1、编写服务单元文件:使用文本编辑器(如vim或nano)创建一个新的服务单元文件,通常存储在/etc/systemd/system/目录下,以.service为后缀名。

2、编辑服务单元文件,定义服务的名称、描述、执行路径等信息。例如:

ini 复制代码
    [Unit]
    Description=My Custom Service 
    After=network.target 
    [Service] 
    Type=simple 
    ExecStart=/path/to/your/executable 
    [Install] 
    WantedBy=multi-user.target

3、重新加载systemd管理器配置:

使用以下命令重新加载systemd管理器的配置,以使新的服务单元生效:

markdown 复制代码
    sudo systemctl daemon-reload

写在最后

这篇技术文章详细介绍了各种进程管理相关命令的精髓,让你轻松掌握高效处理进程的技巧和窍门。无论你是想加深对系统运维的理解,还是希望优化系统性能,本文都将为你提供最实用的指南和实例。点赞收藏,随时翻阅,让你的Linux之旅更上一层楼!立即阅读,开启进程管理新篇章!

相关推荐
码蜂窝编程官方6 分钟前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
hummhumm25 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
哎呦喂-ll25 分钟前
Linux进阶:环境变量
linux
Rverdoser27 分钟前
Linux环境开启MongoDB的安全认证
linux·安全·mongodb
J老熊35 分钟前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
PigeonGuan37 分钟前
【jupyter】linux服务器怎么使用jupyter
linux·ide·jupyter
AuroraI'ncoding41 分钟前
时间请求参数、响应
java·后端·spring
好奇的菜鸟1 小时前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
Alive~o.01 小时前
Go语言进阶&依赖管理
开发语言·后端·golang