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

Linux作为一种开源的操作系统,具有广泛的应用和用户群体。在Linux系统中,进程是操作系统中最基本的执行单位,进程管理是系统管理的核心之一。本文将从基本操作开始,逐步介绍Linux进程管理的各个方面,帮助读者全面了解和掌握Linux进程管理的技巧和工具。

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:显示帮助信息。
      在这里插入图片描述

示例用法:

  1. 启动htop并显示系统进程:
htop
  1. 只显示指定用户的进程:
htop -u username
  1. 只显示指定PID的进程:
htop -p 1234
  1. 按CPU使用率进行排序:
htop -s cpu
  1. 以树状图的形式显示进程关系:
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:可选参数,用于指定要操作的单位(服务)。

示例用法:

  1. 启动一个单位(服务):
systemctl start unit.service
  1. 设置一个单位(服务)在系统启动时自动启动:
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进程管理的各个方面,包括显示系统执行的进程、终止进程、查看进程树、服务管理、动态监控进程和监控网络状态等。

猜你喜欢

转载自blog.csdn.net/Goforyouqp/article/details/132061970