Linux进程

Linux进程

基本概念

  • 在 Linux 系统中,进程是正在运行的程序的实例。每个进程都有一个唯一的进程 ID(PID),并且可以包含一个或多个线程。
  • 进程的基本概念
    • 进程:正在运行的程序的实例,包括代码、数据和系统资源。
    • 线程:进程内的执行单元,共享进程的内存和资源。
    • PID(Process ID):每个进程的唯一标识符。
    • PPID(Parent Process ID):父进程的 PID。
    • 进程状态
      • 运行(R):进程正在运行或等待运行。
      • 睡眠(S):进程正在等待事件完成。
      • 停止(T):进程被暂停。
      • 僵尸(Z):进程已终止,但其父进程尚未回收资源。

查看进程

ps 命令

  • 功能:显示当前进程状态。

  • 常用选项

    • ps aux:显示所有用户的进程。
    • ps -ef:显示完整格式的进程信息。
    • ps -e:显示所有进程。
    • ps -u <用户名>:显示指定用户的进程。
  • ps aux
    
  • USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.1  12345  6789 ?        Ss   10:00   0:01 /sbin/init
    
  • 字段说明

    • USER:进程所有者。
    • PID:进程 ID。
    • %CPU:CPU 使用率。
    • %MEM:内存使用率。
    • VSZ:虚拟内存大小。
    • RSS:物理内存大小。
    • TTY:终端类型。
    • STAT:进程状态。
    • START:进程启动时间。
    • TIME:进程占用 CPU 时间。
    • COMMAND:启动进程的命令。
  • pstree 命令

    • 功能:以树状结构显示进程及其子进程。
    • 常用选项
      • -p:显示进程 ID。
      • -u:显示进程所有者。

top命令

  • 基本功能

    • 实时显示系统的进程和资源使用情况。
    • 动态更新视图,默认每 3 秒刷新一次。
    • 支持交互式操作,如排序、终止进程等。
  • 在终端中输入以下命令启动 top

    • top
      
    • 启动后,top 会显示一个实时更新的界面。

  • top 界面分为两部分:摘要区域进程列表

    • 摘要区域

    • 第一行:系统时间、运行时间、用户数、负载平均值。

      • top - 10:00:00 up 1 day,  2:30,  3 users,  load average: 0.15, 0.10, 0.05
        
    • 第二行:任务总数、运行中的任务、睡眠中的任务、停止的任务、僵尸任务。

      • Tasks: 123 total,   1 running, 122 sleeping,   0 stopped,   0 zombie
        
    • 第三行:CPU 使用情况。

      • %Cpu(s):  1.5 us,  0.5 sy,  0.0 ni, 97.5 id,  0.5 wa,  0.0 hi,  0.0 si,  0.0 st
        
        • us:用户空间占用 CPU 百分比。
        • sy:内核空间占用 CPU 百分比。
        • id:空闲 CPU 百分比。
        • wa:等待 I/O 的 CPU 百分比。
    • 第四行:内存使用情况。

    • 第五行:交换分区使用情况。

      • MiB Mem :  8000.0 total,  2000.0 free,  3000.0 used,  3000.0 buff/cache
        MiB Swap:  2000.0 total,  1500.0 free,   500.0 used.  4000.0 avail Mem
        
    • 进程列表

      • 显示每个进程的详细信息,默认按 CPU 使用率排序。

      • PID   USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
        1234  root      20   0  123456  78901   1234 R   1.5   0.1   0:01.23 myprogram
        
      • 字段说明

        • PID:进程 ID。
        • USER:进程所有者。
        • PR:优先级。
        • NI:nice 值。
        • VIRT:虚拟内存大小。
        • RES:物理内存大小。
        • SHR:共享内存大小。
        • S:进程状态(R=运行,S=睡眠,Z=僵尸)。
        • %CPU:CPU 使用率。
        • %MEM:内存使用率。
        • TIME+:进程占用 CPU 时间。
        • COMMAND:启动进程的命令。
  • top 的交互式操作

  • top 运行时,可以按以下键进行交互操作:

    • 排序
      • 按 CPU 使用率排序:按 P 键。
      • 按内存使用率排序:按 M 键。
      • 按进程 ID 排序:按 N 键。
      • 按运行时间排序:按 T 键。
    • 显示选项
      • 显示完整的命令路径:按 c 键。
      • 显示或隐藏 CPU 核心信息:按 1 键。
      • 显示或隐藏内存和交换分区信息:按 m 键。
    • 进程管理
      • 终止进程:按 k 键,然后输入进程 ID。
      • 调整进程优先级:按 r 键,然后输入进程 ID 和新的 nice 值。
    • 刷新频率
      • 设置刷新间隔:按 d 键,然后输入刷新间隔(秒)。(默认为3)
    • 退出 top
      • q 键退出 top

终止进程

  • kill 命令

    • 功能:向进程发送信号,默认发送 SIGTERM(终止信号)。

    • 使用 kill 终止父进程时,默认不会自动终止其子进程。

    • kill [选项] <PID>
      
    • 常用信号

      • SIGTERM(15):请求进程正常终止(默认信号)。
      • SIGKILL(9):强制终止进程。
      • SIGSTOP(19):暂停进程。
      • SIGCONT(18):恢复暂停的进程。
  • pkill 命令

    • 功能:根据进程名终止进程。

    • pkill [选项] <进程名>
      
  • killall 命令

    • 功能:根据进程名终止所有同名进程。

    • killall指令支持使用通配符

    • killall 默认会终止指定进程名的所有进程,包括其子进程。

    • killall [选项] <进程名>
      
  • 权限问题:普通用户只能终止自己的进程,root 用户可以终止所有进程。

  • 僵尸进程:僵尸进程无法被终止,需要终止其父进程以回收资源。

  • kill 命令可以通过进程 ID 终止进程,也可以通过进程组终止父进程及其子进程。

  • killall 命令通过进程名终止所有同名进程,包括其子进程。

服务管理

  • 服务管理是系统管理员的重要任务之一。服务是在后台运行的应用程序或进程,通常用于提供特定的功能(如网络服务、数据库服务等)。

  • 常用命令(使用systemctl

  • systemctl指令管理的服务在/usr/lib/systemd/system/目录下查看

    • # 启动服务:
      systemctl start <服务名>
      # 停止服务:
      systemctl stop <服务名>
      # 重启服务:
      systemctl restart <服务名>
      # 查看服务状态
      systemctl status <服务名>
      # 启用开机自启动:
      systemctl enable <服务名>
      # 禁用开机自启动:
      systemctl disable <服务名>
      # 重新加载服务配置:
      systemctl reload <服务名>
      
  • 查看服务

    • 列出所有已安装的服务:

      • systemctl list-unit-files --type=service
        
    • 查看是否开机自启动

      • systemctl is-enable <服务名>
        
    • 使用 ps 命令查看服务的进程:

      • ps aux | grep <服务名>
        
  • 服务的运行状态

    • 目标名称 对应运行级别 描述
      poweroff.target 0 关机模式。
      rescue.target 1 单用户模式,用于系统维护。
      multi-user.target 2, 3, 4 多用户模式,不包含图形界面。
      graphical.target 5 图形界面模式,包含图形登录界面。
      reboot.target 6 重启模式。
    • 使用 systemctl 命令查看当前的运行状态:

      • systemctl get-default
        
    • 使用 systemctl 命令设置默认目标:

      • systemctl set-default <目标>
        sudo systemctl set-default graphical.target  # 设置默认目标为图形界面模式
        

网络服务

  • 查看网络

    • ifconfig
      # 或者
      ip addr show
      
  • 查看网络相关信息netstat

    • -a:显示所有连接(包括监听和非监听的连接)。

    • netstat -a
      
    • -p:显示与连接相关的进程信息。

    • 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.1.100:22       192.168.1.200:54321     ESTABLISHED 5678/ssh
      
      • PID/Program name:显示与连接相关的进程 ID 和程序名称。
        • 1234/sshd:表示 PID 为 1234 的 sshd 进程正在监听端口 22。
          • 这表示本地主机上的 sshd 进程(PID 为 1234)正在监听 22 端口,等待外部连接。
        • 5678/ssh:表示 PID 为 5678 的 ssh 进程正在与远程主机建立连接。
          • 这表示本地主机上的 ssh 进程(PID 为 5678)正在与远程主机 192.168.1.200 建立 SSH 连接。
  • 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.1.100:22       192.168.1.200:54321     ESTABLISHED 5678/ssh
    
    • 字段说明
      • Proto:协议类型(如 TCP、UDP)。
      • Recv-Q:接收队列中的数据量。
      • Send-Q:发送队列中的数据量。
      • Local Address:本地地址和端口。
      • Foreign Address:远程地址和端口。
      • State:连接状态(如 LISTEN、ESTABLISHED)。
      • PID/Program name:进程 ID 和程序名称。

防火墙设置

  • 外部链接访问系统端口时会经过防火墙,防火墙中设置了对外开放的端口和不能访问的端口

  • 打开端口指令:

    • firewall-cmd --permanent --add-port=端口号/协议
      
      • 其中端口号和协议可以使用netstat命令进行查看
      • --permanent:将规则永久保存到防火墙配置文件中。
      • 保存的配置文件位于 /etc/firewalld/zones/ 目录下(如 public.xml)。
      • 永久规则在系统重启后仍然有效。
  • 关闭端口

    • firewall-cmd --permanent --remove-port=端口号/协议
      
  • 重新载入才能生效

    • firewall-cmd --reload
      
  • 查询端口是否开放

    • firewall-cmd --query-port=端口号/协议
      
  • 使用 telnet 测试端口连通性

    • telnet <服务器IP> <端口号>
      telnet 192.168.1.100 22
      
    • 测试的时候确定端口被监听并且端口 上可能存在运行的服务。

    • 如果连接成功,会显示服务器的欢迎信息或提示符。

    • 如果连接失败,会显示错误信息(如 Connection refusedTimeout)。

posted @ 2025-03-26 20:21  QAQ001  阅读(32)  评论(0)    收藏  举报