第16章 进程管理与SELinux初探

本文详细解释了Linux中的进程、线程概念,包括它们的区别,进程管理工具如ps、top的使用方法,以及任务控制、信号处理、nice值调整和系统资源监控的相关操作。

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

16.1 什么是进程(process)

程序(program):指二进制程序,放置在存储媒介(如硬盘,光盘,磁带等),以物理文件形式存在,静态概念,是保存在磁盘上的一系列文件

进程(process):程序被触发后,执行者的权限与属性、程序的代码与所需数据都会被加载到内存中,操作系统给予一个标志符(PID),可以说进程就是一个正在运行的、动态的程序

线程:一个程序包括一个或多个进程

          线程是CPU资源分配的最小单元

          线程需要的资源更少,可以看做是一种轻量级的进程

          线程会共享进程中的内存,线程也有独立的空间(栈、程序计数器)

          线程相互通信更加方便

子父进程:进程彼此之间具有关联性,被父进程触发的命令就是子进程,比如下图3188356是3548179的父进程,第2个bash是从第1个产生的

如果某个进程无法关闭或删除,可能是父进程又生成了一个,可以检查它的父进程,然后删掉

[root@host-192-168-177-101 ~]# ps -l | grep bash
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 3188356 3188347  0  80   0 - 29158 do_wai pts/0    00:00:00 bash
4 S     0 3548179 3188356  0  80   0 - 29123 do_wai pts/0    00:00:00 bash

服务(daemon):常驻内存的进程,包括系统或网络服务,比如crond,named

16.2 任务管理(job control)

bash任务管理限制

1)这些任务所触发的进程必须来自shell的子进程(只管理自己的bash)

2)前台:可以控制与执行命令的环境叫做前台的任务(foreground)

3)后台:可以自动执行的任务,无法使用[Ctrk] + c终止,可以使用bg,fg调用任务

4)后台中执行的进程不能等待terminal或shell的输入

&:将命令丢在后台执行

# 比如把打包任务放在后台
# tar -zpcf /tmp/etc.tar.gz /etc &

nohup:系统注销或者脱机后也能继续任务的执行

写法:nohup [命令与参数] &,没加&就是在前台执行,加上就是后台

jobs:查看当前的后台任务状态

    -l:列出PID

    -r:列出后台run的任务

    -s:列出后台stop的任务

[tecs@host-192-168-30-156 ~]$ jobs -l
[1]- 133203 Stopped                 vim ifcfg-bond0
[2]+ 134172 Stopped (signal)        top

上面表示有2个后台任务并且被stopped,使用fg时,[2]会被拿到前台处理

fg:将后台任务拿到前台处理

[tecs@host-192-168-30-156 ~]$ fg      # [2]被拿到前台
[tecs@host-192-168-30-156 ~]$ fg %1   # %num就是指定取出的号码,比如[1]

bg:让任务在后台变成运行中

bg %num可以指定号码

kill:管理后台中的任务

写法:kill -signal %jobnumber

    -l :列出目前kill可以使用的signal有哪些

    signal:

        -1:重新读取一次参数的配置文件

        -9:立即强制删除一个任务

        -15:正常的进程方式终止一项任务

16.3 进程管理

===进程查看===

ps:查看进程情况

写法:ps aux/ps -lA  #查看系统所有的进程

            ps axjf           #连同部分进程数

#仅查看自己的bash相关进程
[root@host-192-168-30-156 tecs]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
1 S     0   4816   4813  0  80   0 - 51608 poll_s pts/3    00:00:00 sudo
4 S     0   4817   4816  3  80   0 - 29091 do_wai pts/3    00:00:00 bash
0 R     0   4881   4817  0  80   0 - 38312 -      pts/3    00:00:00 ps

F:代表进程标志flag,说明这个进程的权限:4表示进程权限是root,1表示此子进程只执行复制(fork),没有实际执行(exec)

S:进程的状态(R:运行,S:睡眠,D:睡眠且不可唤醒,T:停止状态,Z:僵尸状态,已经终止但是无法删除出内存)

PRI/NI:Priority/Nice的缩写,代表此进程被执行的优先级,越小越好

ADDR/SZ/WCHAN:进程在内存的地址/用掉多少内存/进程是否运行(【-】代表正在运行)

TTY:登陆者的终端位置,远程登录是pts/3

TIME:进程执行花费CPU的时间

CMD:具体的命令

[root@host-192-168-30-156 tecs]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  1.6  0.0  60804 13236 ?        SNs  Jul25 265:40 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2  0.0  0.0      0     0 ?        S    Jul25   0:02 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    Jul25   4:53 [ksoftirqd/0]

VSZ:进程用掉的虚拟内存(KB)

RSS:进程占用的固定内存(KB)

STAT:即ps -l的S

top:动态查看进程的变化

    -d:后面接数字,代表进程界面更新的描述,默认5秒

    -b:批量的方式执行

    -n:与-b搭配,执行几次top的输出结果

    -p:可指定某个PID进行检测

top执行过程中还可以使用按键命令

    P:按照CPU使用排序

    M:以Memory排序

    N:以PID排序

    T:进程使用时间排序

    r:基于某个PID新的nice值

[root@host-192-168-30-156 tecs]# top -d 2
top - 14:13:30 up 11 days,  5:39,  4 users,  load average: 0.21, 0.26, 0.31
Tasks: 877 total,   1 running, 876 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.3 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st, 99.4 id_exact,  0.0 hi_exact,  0.0 irq_exact

KiB Mem : 39436160+total, 38492886+free,  7249556 used,  2183196 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 38524627+avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  7516 root      39  19       0      0      0 S   1.5  0.0   2611:24 kipmi0
112202 root      20   0  162928   3224   1616 R   1.0  0.0   0:00.16 top
 16326 root      20   0  191380   9560   3632 S   0.5  0.0 131:57.06 zxdvs_guard.py
     1 root      30  10   60804  13236   4200 S   0.5  0.0 265:51.96 systemd

第一行:表示当前时间14:13:30,开机11天5小时39分,以及登录系统的人数4个,系统在1,5,15分钟的平均任务负载是0.21, 0.26, 0.31(ps,值最好小于1)

第二行:代表目前进程的总数和各状态的数量

第三行:显示CPU的整体负载,wa代表I/O wait,多内核可以按下【1】切换成不同CPU的负载率

第四、五行:目前物理内存与虚拟内存(Mem/Swap)情况

第六行:进程显示的具体状态

# 将top的信息执行2此,并输出到/tmp/top.txt
[root@host-192-168-30-156 tecs]# top -b -n 2 > /tmp/top.txt

# 获取自己的bash PID,并持续查看top
[root@host-192-168-30-156 tecs]# echo $$
4817
[root@host-192-168-30-156 tecs]# top -d 2 -p 4817
top - 14:22:53 up 11 days,  5:48,  4 users,  load average: 0.11, 0.17, 0.25
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.7 sy,  0.1 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st, 98.7 id_exact,  0.0 hi_exact,  0.1 irq_exact
KiB Mem : 39436160+total, 38493504+free,  7242984 used,  2183576 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 38525228+avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  4817 root      20   0  116364   3008   1704 S   0.0  0.0   0:00.08 bash

pstree [ -A | U ] [ -up ]

    -A:进程树之间用ASCII字符链接

    -U:以Unicode链接

    -p:同时列出进程PID

    -u:同时列出进程的所属账号

===进程管理===

kill -signal PID

killall [-iIe] [command name]

-i:删除时询问

[root@host-192-168-30-156 tecs]# killall -i -9 bash
Signal bash(4817) ? (y/N) n

nice:新执行的命令即基于新的nice值

-n:后面接一个数值,范围-20~19

# 给一个nice值-5,并用于执行vim
[root@host-192-168-30-156 tecs]# nice -n -5 vim &
[1] 212702
[root@host-192-168-30-156 tecs]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
1 S     0   4816   4813  0  80   0 - 51608 poll_s pts/3    00:00:00 sudo
4 S     0   4817   4816  0  80   0 - 29091 do_wai pts/3    00:00:00 bash
4 T     0 212702   4817  0  75  -5 - 37252 do_sig pts/3    00:00:00 vim
0 R     0 212804   4817  0  80   0 - 38312 -      pts/3    00:00:00 ps

[1]+  Stopped                 nice -n -5 vim
[root@host-192-168-30-156 tecs]# kill -9 %1  #记得删除
# 原本vim默认是80,现在各减了5

renice:重新调整已存在进程的nice

renice [number] PID

[root@host-192-168-30-156 tecs]# renice -5 14836

===查看系统资源信息===

free:查看内存使用情况

    -b/k/m/g/h:显示单位

    -t:最终结果显示total

    -s:实时刷数据,后面接数字n,代表n秒刷一次

    -c:刷数据的次数,后面接n

uname:查看系统与内核信息

    -a:所有系统的信息

netstat:追踪网络或socket文件

    后面学习

vmstat:检测系统资源变化

# 统计目前CPU状态,每秒一次,一共3次
[root@host-192-168-30-156 tecs]# vmstat 1 3
procs -----------memory----------      ---swap-- -----io--- -system--  ------cpu-----
 r  b   swpd   free     buff  cache     si   so    bi    bo   in   cs  us sy id wa st
 3  0      0 384934080 319948 1864328    0    0   117   135    0    0  0  1 89 11  0
 1  0      0 384933792 319948 1864328    0    0     0     0 2004 1699  0  0 100  0  0
 1  0      0 384933504 319948 1864328    0    0     0    36 3783 2521  0  0 99  0  0

procsmemoryswapiosystemcpu
rbswpdfreebuffcachesisobiboincsussyidwast
300384934080319948186432800117135000189110

等待

运行数

不可被唤醒

的进程数量

虚拟内存

使用量

未被使用

内存

用于缓存

存储器

用于

高速存储

由磁盘读入

的区块数量

写入到磁盘

的区块数量

非内核层

使用CPU

内核层使用

CPU状态

闲置的

状态

等待I/O耗费的

CPU的状态

被虚机使用

CPU状态

si/so:数据如果太大,表示内存中的数据经常在磁盘与内存之间传输,系统极差

in/cs:数据大表示系统与外接设备的沟通频繁,接口包括磁盘,网卡

# 系统上所有磁盘的读写状态
[root@host-192-168-30-156 tecs]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sda      422      0   21536    1011      0      0       0       0      0      0
sdb      422      0   21536     947      0      0       0       0      0      0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值