Linux进程管理详解:从基本操作到动态监控网络状态(ps、top、kill、killall、pstree、htop、systemctl、netstat、ss)

1. 基本介绍

1.1 进程的概念

进程是计算机中正在运行的程序的实例。每个进程都有自己的内存空间、寄存器和文件描述符等资源。进程可以独立执行,与其他进程并发运行。

1.2 进程的状态

Linux系统中的进程可以处于以下几种状态:

运行(Running):进程正在执行或等待CPU资源。

睡眠(Sleeping):进程等待某个事件的发生,例如等待用户输入或等待I/O操作完成。

停止(Stopped):进程被暂停执行,等待被其他进程唤醒。

僵尸(Zombie):进程已经结束,但其父进程还未调用wait()系统调用来获取其终止状态。

1.3 进程ID(PID)

每个进程在系统中都有一个唯一的进程ID(PID),用于标识该进程。PID是一个非负整数,可以通过getpid()函数获取当前进程的PID。

2. 显示系统执行的进程

2.1 ps命令

ps命令用于显示当前系统中正在执行的进程。常用的参数有:

  • -e:显示所有进程,包括其他用户的进程。
  • -f:显示进程的详细信息,包括进程的PID、父进程的PID、进程状态等。
  • -u <username>:显示指定用户的进程。

示例代码:

$ ps -ef

示例输出:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:00 ?        00:00:01 /sbin/init
root         2     0  0 08:00 ?        00:00:00 [kthreadd]
root         3     2  0 08:00 ?        00:00:00 [ksoftirqd/0]
root         5     2  0 08:00 ?        00:00:00 [kworker/0:0H]
root         7     2  0 08:00 ?        00:00:00 [rcu_sched]
root         8     2  0 08:00 ?        00:00:00 [rcu_bh]
...

在上面的输出中,每一列的含义如下:

  • UID:进程的用户ID,表示进程属于哪个用户。
  • PID:进程的ID,是唯一标识一个进程的数字。
  • PPID:父进程的ID,表示该进程是由哪个进程创建的。
  • C:进程的CPU使用率,表示进程在CPU上占用的时间片。
  • STIME:进程的启动时间,表示进程开始运行的时间。
  • TTY:进程所在的终端,表示该进程与哪个终端设备关联。
  • TIME:进程的运行时间,表示该进程已经运行了多长时间。
  • CMD:进程的命令行,表示进程是通过哪个命令启动的。

2.2 top命令

top命令用于实时监控系统的进程和系统资源使用情况。它以交互方式显示进程列表,并按照CPU使用率或内存使用率进行排序。

示例代码:

$ top

示例输出:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  1 root      20   0  168584   9856   6516 S   0.0  0.1   0:03.96 systemd
  2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
  3 root      20   0       0      0      0 S   0.0  0.0   0:00.00 ksoftirqd/0
  5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
  7 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_sched
...

在上面的输出中,每一列的含义如下:

  • PID:进程的ID,是唯一标识一个进程的数字。
  • USER:进程的所属用户,表示进程属于哪个用户。
  • PR:进程的优先级,数值越小优先级越高。
  • NI:进程的优先级调整值,负数表示较高优先级,正数表示较低优先级。
  • VIRT:进程使用的虚拟内存大小,包括进程的代码、数据和堆栈等。
  • RES:进程使用的物理内存大小,表示进程实际占用的物理内存。
  • SHR:进程使用的共享内存大小,表示进程与其他进程共享的内存。
  • S:进程的状态,包括R(运行)、S(睡眠)、D(不可中断的睡眠)、Z(僵尸)等。
  • %CPU:进程使用的CPU占比,表示进程在当前时间片内使用CPU的时间比例。
  • %MEM:进程使用的内存占比,表示进程占用系统总内存的比例。
  • TIME+:进程的累计CPU使用时间,表示进程已经使用CPU的总时间。
  • COMMAND:进程的命令行,表示进程是通过哪个命令启动的。

3. 终止进程

3.1 kill命令

kill命令用于终止指定进程。它向指定进程发送一个信号,可以是终止进程的信号(默认为SIGTERM)或其他自定义信号。

示例代码:

$ kill <PID>

3.2 killall命令

killall命令用于终止指定进程名对应的所有进程。它与kill命令不同的是,不需要指定进程的PID,只需指定进程名即可。

示例代码:

$ killall <process_name>

4. 查看进程树

4.1 pstree命令

pstree命令用于以树状结构显示进程及其子进程。它可以帮助我们更直观地理解进程之间的关系。

示例代码:

pstree [OPTIONS] [PID]

pstree命令的参数说明如下:

OPTIONS:可选参数,用于指定输出格式和其他选项。

  • -a:显示进程的命令行参数。
  • -c:显示进程的完整命令行。
  • -h:高亮显示当前进程。
  • -l:使用长格式输出。
  • -n:以数字排序进程。
  • -p:显示进程的PID。
  • -u:显示进程的所属用户。

PID:可选参数,用于指定要显示的进程的PID。如果不指定PID,则默认显示当前进程及其子进程的关系。

4.2 htop命令

htop是一个交互式的进程查看器,它提供了比top更加强大和直观的功能。htop可以实时监控系统的进程、系统资源和系统状态,并以直观的方式展示给用户。下面是htop命令的基本用法:

htop [OPTIONS]

htop命令的参数说明如下:

OPTIONS:可选参数,用于指定输出格式和其他选项。

  • -d, --delay=DELAY:设置刷新间隔的延迟时间(单位:秒)。
  • -u, --user=USERNAME:只显示指定用户的进程。
  • -p, --pid=PID:只显示指定PID的进程。
  • -s, --sort-key=COLUMN:按指定的列进行排序,可选的列包括PID、USER、CPU、MEM等。
  • -t, --tree:以树状图的形式显示进程关系。
  • -h, --help:显示帮助信息。

示例用法:

启动htop并显示系统进程:

htop

只显示指定用户的进程:

htop -u username

只显示指定PID的进程:

htop -p 1234

按CPU使用率进行排序:

htop -s cpu

以树状图的形式显示进程关系:

htop -t

5. 服务管理

5.1 systemctl命令

systemctl命令是用于管理systemd系统和服务的命令行工具。systemd是现代Linux系统中常用的系统和服务管理器,systemctl命令可以帮助我们启动、停止、重启、管理和监控系统服务。下面是systemctl命令的基本用法:

systemctl [OPTIONS] [COMMAND] [UNIT]

$ systemctl start <service_name>
$ systemctl stop <service_name>
$ systemctl restart <service_name>
$ systemctl status <service_name>

systemctl命令的参数说明如下:

OPTIONS:可选参数,用于指定额外的选项。

  • -a, --all:显示所有的单位(服务)。
  • -p, --property=NAME:显示指定属性的值。
  • -H, --host=HOST:在远程主机上执行命令。

COMMAND:必选参数,用于指定要执行的命令。

  • start:启动指定的单位。
  • stop:停止指定的单位。
  • restart:重启指定的单位。
  • reload:重新加载指定的单位。
  • enable:设置指定的单位在系统启动时自动启动。
  • disable:设置指定的单位在系统启动时不自动启动。
  • status:显示指定的单位的状态。
  • list-units:列出所有的单位。
  • list-unit-files:列出所有的单位文件。

UNIT:可选参数,用于指定要操作的单位(服务)。

示例用法:

启动一个单位(服务):

systemctl start unit.service

设置一个单位(服务)在系统启动时自动启动:

systemctl enable unit.service

6. 动态监控进程

6.1 top命令监控进程

假设我们使用top命令查看系统的进程列表和性能指标

示例输出

top - 09:30:00 up 1 day, 2:30,  2 users,  load average: 0.10, 0.15, 0.12
Tasks: 201 total,   1 running, 200 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.5 us,  1.2 sy,  0.0 ni, 95.2 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :   7842.3 total,   1911.4 free,   4779.6 used,   1151.3 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   2580.7 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  1234 root      20   0  100.0m  10.0m   5.0m R   1.0   0.1   0:01.00 process1
  5678 user1     20   0   50.0m   5.0m   2.5m S   0.5   0.1   0:00.50 process2
  9101 user2     20   0   25.0m   2.5m   1.2m S   0.2   0.0   0:00.20 process3

在这个示例中,我们可以看到以下信息:

  • 当前时间为09:30:00,系统已经运行了1天2小时30分钟,有2个用户登录。
  • 系统的平均负载为0.10、0.15和0.12,表示过去1分钟、5分钟和15分钟的平均负载。
  • 总进程数为201,其中有1个正在运行的进程,200个睡眠中的进程,没有停止的进程和僵尸进程。
  • CPU使用率为3.5%用户空间、1.2%系统空间、0.0%nice值、95.2%空闲、0.0%等待I/O、0.0%硬中断、0.1%软中断。
  • 内存使用情况为7842.3 MiB总内存,1911.4 MiB空闲内存,4779.6 MiB已使用内存,1151.3 MiB缓存和缓冲区使用情况。
  • 交换空间使用情况为2048.0 MiB总交换空间,2048.0 MiB空闲交换空间,没有使用的交换空间,2580.7 MiB可用内存。

在进程列表中,我们可以看到三个进程的详细信息,包括进程ID、所属用户、CPU使用率、内存使用率、虚拟内存大小、物理内存大小、进程状态、启动时间、累计CPU占用时间和进程命令行。

6.2 交互操作

  • k:杀死选中的进程。
  • r:改变选中进程的优先级。
  • 1:切换CPU核心的显示。
  • f:显示或隐藏列字段。
  • o:根据指定的列字段进行排序。
  • s:改变刷新时间间隔。
  • q:退出top命令。

您可以按下对应的键来执行相应的操作。例如,按下k键,然后输入要杀死的进程的PID,即可杀死该进程。按下o键,然后输入要排序的列字段,即可按照指定的字段对进程列表进行排序。

7. 监控网络状态

7.1 netstat命令

netstat命令用于显示网络连接、路由表和网络接口等信息。它可以帮助我们监控系统的网络状态和性能。

下面是netstat -anp命令输出的示例:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd           
tcp        0      0 192.168.0.100:12345     10.0.0.1:54321         ESTABLISHED 5678/myapp          
udp        0      0 0.0.0.0:53              0.0.0.0:*                           9101/dnsmasq        

在这个示例中,我们可以看到以下信息:

  • 当前有活动的Internet连接,包括正在监听的服务器和已建立的连接。
  • 第一列显示连接的协议类型,例如tcp或udp。
  • 第二列显示接收队列中的字节数(Recv-Q)和发送队列中的字节数(Send-Q)。
  • 第三列显示本地地址和端口。
  • 第四列显示远程地址和端口。
  • 第五列显示连接的状态,例如LISTEN(监听)或ESTABLISHED(已建立)。
  • 最后一列显示与连接相关的进程的PID和程序名称。

7.2 ss命令

ss命令是一个强大的工具,用于显示当前系统的套接字(socket)统计信息。它可以提供比netstat更详细和更快速的套接字信息。下面是ss命令的一些常用选项和示例:

  • ss -t:显示TCP套接字统计信息。
  • ss -u:显示UDP套接字统计信息。
  • ss -l:显示所有监听套接字的统计信息。
  • ss -p:显示与套接字关联的进程信息。
  • ss -n:以数字格式显示IP地址和端口号。
  • ss -a:显示所有套接字(包括监听和非监听套接字)的统计信息。
  • ss -o:显示计时器信息。

以下是ss命令的输出示例:

State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port              
ESTAB      0      0             192.168.0.100:12345         10.0.0.1:54321                
LISTEN     0      10            0.0.0.0:22                   0.0.0.0:*                    

在这个示例中,我们可以看到以下信息:

  • 第一列显示套接字的状态,例如ESTAB(已建立)或LISTEN(监听)。
  • 第二列显示接收队列中的字节数(Recv-Q)和发送队列中的字节数(Send-Q)。
  • 第三列显示本地地址和端口。
  • 第四列显示远程地址和端口。

ss命令还可以与其他选项和过滤器一起使用,以提供更具体的套接字信息。

结论

本文详细介绍了Linux进程管理的各个方面,包括显示系统执行的进程、终止进程、查看进程树、服务管理、动态监控进程和监控网络状态等。

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值