linux运维基础[进程管理]——————进程的概念、进程的状态、ps查看进程、调整进程的优先级

本文介绍了Linux中的进程概念,包括进程的定义和运行状态。重点讲解了`ps`命令的使用,如单个参数和常用组合,展示如何查看进程信息、排序以及调整进程优先级。通过实例演示了如何查看和调整进程优先级,帮助读者掌握Linux系统中的进程管理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 进程

进程定义

  • 进程是正在运行的程序的实例。
  • 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

2. 进程运行的状态

在这里插入图片描述

3. ps命令

查看指定的进程:

ps [参数]
    a   ##关于当前环境的所有进程
    x| -A   ##所有进程
    f   ##显示进程从属关系
    e   ##显示进程调用环境工具的详细信息
    l   ##长列表显示进程的详细信息
    u   ##显示进程的用户信息
    -a  ##显示shell前台运行命令的进程,但不保函shell本身

现在进行测试:

3.1 单个参数的使用

ps a 显示现行终端机下的所有程序,包括其他用户的程序。

[root@study ~]# ps a
  PID TTY      STAT   TIME COMMAND
 1455 tty1     Ss+    0:00 /usr/bin/Xorg :0 -background none -verbose -auth /run
 1460 ttyS0    Ss+    0:00 /sbin/agetty --keep-baud ttyS0 115200 38400 9600
 1618 pts/0    Ss     0:00 -bash
 1841 pts/0    R+     0:00 ps a

ps -A | x :选择所有进程。与-e相同

[root@study ~]# ps -A
  PID TTY          TIME CMD
    1 ?        00:00:01 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    7 ?        00:00:00 migration/0
    8 ?        00:00:00 rcu_bh
    9 ?        00:00:00 rcuob/0
   10 ?        00:00:00 rcu_sched
   11 ?        00:00:00 rcuos/0
   12 ?        00:00:00 watchdog/0

ps -a :显示shell前台运行命令的进程,但不保函shell本身(显示所有终端机下执行的程序,除了阶段作业领导者之外)

[root@study ~]# ps -a
  PID TTY          TIME CMD
 1935 pts/0    00:00:00 ps

ps -d :与A类似 ,没有允许环境(shell)

[root@study ~]# ps -d
  PID TTY          TIME CMD
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    7 ?        00:00:00 migration/0
    8 ?        00:00:00 rcu_bh
    9 ?        00:00:00 rcuob/0

ps -e :选择所有进程。与-A相同

[root@study ~]# ps -e
  PID TTY          TIME CMD
    1 ?        00:00:01 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    7 ?        00:00:00 migration/0
    8 ?        00:00:00 rcu_bh
    9 ?        00:00:00 rcuob/0

ps x 显示所有输出设备终端的进程

[root@study ~]# ps x
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:01 /usr/lib/systemd/systemd --switched-root --system --d
    2 ?        S      0:00 [kthreadd]
    3 ?        S      0:00 [ksoftirqd/0]
    5 ?        S<     0:00 [kworker/0:0H]
    7 ?        S      0:00 [migration/0]
    8 ?        S      0:00 [rcu_bh]

ps f 显示进程的从属关系:

[root@study ~]# ps f
  PID TTY      STAT   TIME COMMAND
 1618 pts/0    Ss     0:00 -bash # 这个bash进程下的子进程是ps f 进程
 1868 pts/0    R+     0:00  \_ ps f
 1455 tty1     Ss+    0:00 /usr/bin/Xorg :0 -background none -verbose -auth /run
 1460 ttyS0    Ss+    0:00 /sbin/agetty --keep-baud ttyS0 115200 38400 9600

ps e :显示进程调用环境工具的详细信息(例LANG=en_US.UTF-8 USER=root)

[root@study ~]# ps e
  PID TTY      STAT   TIME COMMAND
 1455 tty1     Ss+    0:00 /usr/bin/Xorg :0 -background none -verbose -auth /run
 1460 ttyS0    Ss+    0:00 /sbin/agetty --keep-baud ttyS0 115200 38400 9600 PATH
 1618 pts/0    Ss     0:00 -bash XMODIFIERS=@im=ibus LANG=en_US.UTF-8 USER=root # 将使用的环境信息表示出来了
 1885 pts/0    R+     0:00 ps e XDG_SESSION_ID=1 HOSTNAME=study.example.com TERM

ps l :长列表显示进程的详细信息 (类似于查看文件时的ll)

[root@study ~]# ps l
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0  1455   576  20   0 160732 17804 poll_s Ss+  tty1       0:00 /usr/bin/Xo
4     0  1460     1  20   0 110004   832 n_tty_ Ss+  ttyS0      0:00 /sbin/agett
4     0  1618  1616  20   0 116144  2764 wait   Ss   pts/0      0:00 -bash
0     0  1909  1618  20   0 121260   984 -      R+   pts/0      0:00 ps l

ps u:显示进程的用户信息(直接显示USER是谁)

[root@study ~]# ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1455  0.0  1.8 160732 17804 tty1     Ss+  23:05   0:00 /usr/bin/Xorg :
root      1460  0.0  0.0 110004   832 ttyS0    Ss+  23:05   0:00 /sbin/agetty --
root      1618  0.0  0.2 116144  2764 pts/0    Ss   23:06   0:00 -bash
root      1918  0.0  0.1 123356  1324 pts/0    R+   23:31   0:00 ps u

3.2 常用组合

ps aux :显示系统当中的所有进程并显示进程用户

[root@study ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.4  50468  4000 ?        Ss   23:05   0:01 /usr/lib/system
root         2  0.0  0.0      0     0 ?        S    23:05   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    23:05   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   23:05   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S    23:05   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    23:05   0:00 [rcu_bh]
USER进程的属主;
PID进程的ID;
PPID父进程;
%CPU进程占用的CPU百分比;
%MEM占用内存的百分比;
NI进程的NICE值,数值大,表示较少占用CPU时间;
VSZ进程使用的虚拟內存量(KB);
RSS该进程占用的固定內存量(KB)(驻留中页的数量);
TTY该进程在那個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。若为pts/0等,则表示由网络连接主机进程
WCHAN当前进程是否正在進行,若为-表示正在進行;
START该进程被触发启动时间;
TIME該进程實際使用CPU運行的时间;
COMMAND命令的名称和参数;

解释stat中的含义:

D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 停止或被追踪;
W 进入内存交换 (从内核2.6开始无效);
X 死掉的进程 (基本很少見);
Z 僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组;

ps ef 显示当前系统当中所有父子关系的进程,列出他的详细信息

[root@study ~]# ps ef
  PID TTY      STAT   TIME COMMAND
 1618 pts/0    Ss     0:00 -bash XMODIFIERS=@im=ibus LANG=en_US.UTF-8 USER=root
 2219 pts/0    R+     0:00  \_ ps ef XDG_SESSION_ID=1 HOSTNAME=study.example.com
 1455 tty1     Ss+    0:00 /usr/bin/Xorg :0 -background none -verbose -auth /run
 1460 ttyS0    Ss+    0:00 /sbin/agetty --keep-baud ttyS0 115200 38400 9600 PATH

pstree:显示当前系统的进程树

[root@study ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───2*[{NetworkManager}]
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─agetty
        ├─alsactl
        ├─at-spi-bus-laun─┬─dbus-daemon
        │                 └─3*[{at-spi-bus-laun}]

并不是父级进程结束以后子进程一定会结束 :

  • 剩下的子进程叫孤儿进程 ,因为父级进程被强行关闭 ,这样会影响系统的正常运行
  • 正常应该先结束子进程,再结束父进程

一般由系统的初始化程序来控制其他进程的开始和结束:

  • 可以用pstree查看系统的进程树(父进程和子进程关系一目了然)
  • systemd为初始化程序,是所有程序的父级程序,不会自己关闭结束自己。
  • 只有关机才可以,或者结束了所有子进程以后,该初始化进程才会被关闭

3.3 显示指定信息

我们可以通过要求显示指定的信息:

ps ax -o %cpu,%mem,user,group,comm,nice,pid,stat    ##指定显示进程的某些信息

%cpu ##显示进程cpu负载

[root@study ~]# ps ax -o %cpu
%CPU
 0.0
 0.0
 0.0
 0.0
 0.0

%mem 显示进程内存负载

[root@study ~]# ps ax -o %mem
%MEM
 0.4
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0

user 进程用户

[root@study ~]# ps ax -o user
USER
root
root
root
root
root
root

group 进程组

[root@study ~]# ps ax -o group
GROUP
root
root
root
root

comm 进程名称

[root@study ~]# ps ax -o comm
COMMAND
systemd
kthreadd
ksoftirqd/0
kworker/0:0H

nice 进程优先级

[root@study ~]# ps ax -o nice
 NI
  0
  0
  0
-20
  -

pid 进程的id

[root@study ~]# ps ax -o pid
  PID
    1
    2
    3
    5
    7
    8
    9

stat 进程状态

[root@study ~]# ps ax -o stat
STAT
Ss
S
S
S<

3.4 进程排序

格式为:

ps  ax     --sort=%men        -o %men(升序)
ps  ax     --sort=-%men       -o %men(降序)

进行测试:

不跟-o:

[root@study ~]# ps ax --sort=%mem
  PID TTY      STAT   TIME COMMAND
    2 ?        S      0:00 [kthreadd]
    3 ?        S      0:00 [ksoftirqd/0]
    5 ?        S<     0:00 [kworker/0:0H]
    7 ?        S      0:00 [migration/0]
    8 ?        S      0:00 [rcu_bh]

跟上-o:

[root@study ~]# ps ax --sort=%mem -o %mem
%MEM
 0.0
 0.0
 0.0
 0.0
 0.0

倒叙查看:

[root@study ~]# ps ax --sort=-%mem -o %mem
%MEM
10.1
 2.1
 1.9
 1.8
 1.6
 1.6
 1.2

第一部分表示显示所有进程

第二部分表示对mem内存或者cpu占用进行排序, -表示降序

第三部分表示只显示mem内存或者cpu占用情况

测试:memory +5 pid 显示内存当中前五个的pid

[root@study ~]# ps ax --sort=-%mem -o pid | head -n 6 # 倒数前5个
  PID
 1554
  479
 1493
 1455
 1707
[root@study ~]# ps ax --sort=%mem -o pid | head -n 6 # 正数前5个
  PID
    2
    3
    5
    7
    8

3.5 调整进程的优先级

进程的优先级范围: -20~19 数字越大优先级越高

优先级的查看:ps ax -o pid,nice,comm

[root@study ~]# ps ax -o pid,nice,comm
  PID  NI COMMAND
    1   0 systemd
    2   0 kthreadd
    3   0 ksoftirqd/0
    5 -20 kworker/0:0H
    7   - migration/0

怎样调整进程的优先级:

命令设定进程优先级,以下都是直接在shell里面输入命令即可:

指定某个优先级开启进程(先指定,后开启),nice -n 优先级数字 进程名称

比如:

nice -n 5 vim 开启vim并且指定该程序的优先级为5

[root@study ~]# nice -n 5 vim
[root@study ~]# ps a -o stat,comm,pid,nice
STAT COMMAND           PID  NI
Ss+  Xorg             1455   0
Ss+  agetty           1460   0
Ss   bash             1618   0
Ss   bash             2469   0
SN+  vim              2507   5 # 指定该程序的优先级为5
R+   ps               2508   0

改变进程的优先级(先开启,后改变)
renice -n 优先级数字 进程pid

renice -n -5 2507 改变2507进程的优先级为-5

[root@study ~]# ps a -o stat,comm,pid,nice
STAT COMMAND           PID  NI
Ss+  Xorg             1455   0
Ss+  agetty           1460   0
Ss   bash             1618   0
Ss   bash             2469   0
S+   vim              2548   0 # 之前的优先级
R+   ps               2549   0
[root@study ~]# renice -n -5 2548
2548 (process ID) old priority 0, new priority -5
[root@study ~]# ps a -o stat,comm,pid,nice
STAT COMMAND           PID  NI
Ss+  Xorg             1455   0
Ss+  agetty           1460   0
Ss   bash             1618   0
Ss   bash             2469   0
S<+  vim              2548  -5 # 修改之后的优先级
R+   ps               2551   0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值