第4章 Linux进程管理

什么是进程

进程是已启动的可执行程序的运行实例,进程有以下组成部分:

  • 一个文件;
  • 被配内存的地址空间;
  • 有权限限制;
  • 程序代码的一个或多个副本(也叫执行线程);
  • 像人一样拥有状态;

image.png

image.png

process status

  • PID、PPID
  • 当前进程状态
  • 内存分配情况
  • CPU和已花费的实际时间
  • 用户UID,它决定进程的特权
  • 进程名称
  • RSS:占用实际内存
  • VSZ:占用虚拟内存
  • TTY:进程运行的终端
  • START:进程的启动时间
  • TIME:进程占用CPU的总时间
  • COMMAND:进程文件、进程名

image.png

进程生命周期

image.png

父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。

每个新进程分配一个,唯一的进程ID(PID),满足跟踪安全性之需。

任何进程都可以创建子进程。

所有的进程都是第一个系统进程的后代。

cpu正在读的是活的(running)

进程状态

image.png

fork:父进程fork一个子进程,父进程进入sleep状态,子进程running,子进程exit,父进程running

run:R

stop:T

zombie:Z

sleep:S

[root@ecs-sn3-medium-2-linux-20191109195358 ~]# ps aux | head -2
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 125348  3880 ?        Ss   Jul18   0:10 /usr/lib/systemd/systemd --switched-root --system --deserialize 22

ps、top、nice

1、静态查看进程ps

  • -A :所有的进程均显示出来,与 -e 具有同样的效用
  • **-a:**显示现行终端机下的所有进程,包括其他用户的进程
  • -u:以用户为主的格式来显示程序状态
  • -f :做一个更为完整的输出
  • x:不以终端机来区分,通常与 a 这个参数一起使用,可列出较完整信息
  • l :较长、较详细的将该PID 的的信息列出
  • j :工作的格式 (jobs format)
以占用cpu率排序

ps aux --sort %cpu

[root@ecs-sn3-medium-2-linux-20191109195358 ~]# ps aux --sort -%cpu | head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 125348  3880 ?        Ss   Jul18   0:10 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S    Jul18   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        S<   Jul18   0:00 [kworker/0:0H]
root         5  0.0  0.0      0     0 ?        S    Jul18   0:11 [kworker/u2:0]
查看进程的父子关系

ps -ef

例如:4进程的父进程为2进程

[root@ecs-sn3-medium-2-linux-20191109195358 ~]# ps -ef | head -5
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jul18 ?        00:00:10 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0 Jul18 ?        00:00:00 [kthreadd]
root         4     2  0 Jul18 ?        00:00:00 [kworker/0:0H]
root         5     2  0 Jul18 ?        00:00:11 [kworker/u2:0]
自定义显示字段

ps axo [选项]

[root@ecs-sn3-medium-2-linux-20191109195358 ~]# ps axo user,pid,ppid,%cpu,%mem,tty,command | head -5
USER       PID  PPID %CPU %MEM TT       COMMAND
root         1     0  0.0  0.2 ?        /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0.0  0.0 ?        [kthreadd]
root         4     2  0.0  0.0 ?        [kworker/0:0H]
root         5     2  0.0  0.0 ?        [kworker/u2:0]

2、动态查看进程top

image.png

top - 21:49:02 up 34 days, 21:26,  1 user,  load average: 0.00, 0.01, 0.05
#程序名 系统时间                           运行时间    登录用户数   CPU负载           5分钟内 10分钟内 15分钟内
Tasks:  70 total,   1 running,  69 sleeping,   0 stopped,   0 zombie
#总进程数                           运行数1            休眠数69                   停止数0            僵死数0
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
#CPU使用占比 us用户       sy系统    ni优先级    idle空闲     wa等待    hi硬件        si软件        st虚拟机
KiB Mem :  1881688 total,   991780 free,   198168 used,   691740 buff/cache
#物理内存K      总共1.88G                     free空闲991M          user使用198M  cache缓存硬盘内容691M
KiB Swap:        0 total,        0 free,        0 used.  1495960 avail Mem 
#虚拟内存0                                              空闲0                     user使用0 

image.png

  • PID,,USER,%CPU,%MEM
  • VIRT:virtual memory usage 虚拟内存
  • RES:resident momory usage 常驻内存
  • SHR:shared memory 共享内存
  • PR:优先级
  • NI:优先级
  • S:状态
  • TIME+:占时
  • COMMAND:命令

[指令]

h|? 帮助

M 按内存的使用排序

P 按CPU使用排序

N 以PID的大小排序

< 向前

> 向后

z 彩色,Z设置颜色,使用数字调整

[选项]

top -d 1 每1秒刷新一次

top -d 1 -p 10126 查看指定进程的动态信息

top -d 1 -p 10126,1 查看10126和1号进程

3、使用信号控制进程

信号种类

给进程发送信号,kill -l 列出所有支持的信号

[root@ecs-sn3-medium-2-linux-20191109195358 ~]# kill -l         #列出所有支持的信号
编号 信号名
 1) SIGHUP   #重新加载配置
 2) SIGINT   #键盘中断Ctrl+C
 3) SIGQUIT  #键盘退出Ctrl+\,类似SIGINT
 9) SIGKILL  #强制终止,无条件
 15) SIGTERM #终止(正常结束),缺省信号
 18) SIGCONT #继续
 19) SIGSTOP #暂停
 20) SIGTSTP #键盘暂停Ctrl+Z

信号9,15

信号9,强制终止,无条件

信号15,终止(正常结束),缺省信号

4、进程优先级nice

简介

Linux进程调度及多任务

每个CPU在一个时间点只能处理一个进程,通过实践分片技术,来同时运行多个程序。

优先级范围和特性

范围

image.png

在top中显示的优先级有两个,PR值和nice值

系统中的两种优先级:

**NI:**实际nice值

PR(+20):将nice级别显示为映射到更大优先级队列,-20映射

事实上,系统会在手动nice值上再加20,显示为PR值

特性

nice值越大:表示优先级越低,例如+19

nice值越小:表示优先级越高,例如-20

查看进程的nice级别

查看进程的nice级别:ps axo user,pid,command,nice --sort=-nice | head -5

[root@localhost ~]# ps axo user,pid,command,nice --sort=-nice | head -5
USER       PID COMMAND                      NI
root        32 [khugepaged]                 19
root        31 [ksmd]                        5
root         1 /usr/lib/systemd/systemd --   0
root         2 [kthreadd]                    0

启动具有不同nice级别的进程

默认情况

启动进程时,通常会继承父进程的nice级别,默认为0

手动启动不同nice
[root@localhost ~]# ps axo user,pid,command,nice --sort=-nice | grep sleep
root     20113 sleep 6000                    0
root     20115 grep --color=auto sleep       0

[root@localhost ~]# nice -n -5 sleep 6000 &
[2] 20116

[root@localhost ~]# ps axo user,pid,command,nice --sort=-nice | grep sleep
root     20113 sleep 6000                    0
root     20118 grep --color=auto sleep       0
root     20116 sleep 6000                   -5

更改现有进程的nice级别

[root@localhost ~]# ps axo user,pid,command,nice --sort=-nice | grep sleep
root     20113 sleep 6000                    0
root     20119 sleep 7000                    0
root     20121 grep --color=auto sleep       0
root     20116 sleep 6000                   -5

[root@localhost ~]# renice -20 20119
20119 (process ID) old priority 0, new priority -20

[root@localhost ~]# ps axo user,pid,command,nice --sort=-nice | grep sleep
root     20113 sleep 6000                    0
root     20124 grep --color=auto sleep       0
root     20116 sleep 6000                   -5
root     20119 sleep 7000                  -20

使用top命令查看这三个进程的系统优先级

top -d 1 -p 20113,20116,20119

image.png

作业控制

sleep 20命令会占领前台

image.png

使用&符号,将命令扔到后台

简介:

作业控制是一个命令行功能,也叫后台运行

关键词介绍:

foreground(fg命令)

前台进程:是在终端中运行的命令,占领终端。

background(bg命令)

后台进程:没有控制终端,它不需要终端的交互。看不见,但是在运行。

后台程序控制实例

1、观察占领前台的现象

运行一个程序,当前终端无法输入。观察占领前台的现象。大部分命令行输入已经无效。

Ctrl+C 终止进程

2、运行后台程序

sleep 3000 &

3、ps查询所有程序

ps aux | grep sleep

[root@localhost ~]# ps aux | grep 3000
root     20188  0.0  0.0 107956   356 pts/0    S    23:55   0:00 sleep 3000
root     20190  0.0  0.0 112712   964 pts/0    R+   23:56   0:00 grep --color=auto 3000

4、jobs查看后台进程

jobs仅包括后台进程,不包括前台进程

[root@localhost ~]# jobs
[1]   Running                 sleep 6000 &
[2]   Running                 nice -n -5 sleep 6000 &
[3]-  Running                 sleep 7000 &
[4]+  Running                 sleep 3000 &

5、fg调动后台程序至前台

[root@localhost ~]# fg 4
sleep 3000
sdfkjsdhf
sdkjfgsjkldgh
^Z
[4]+  Stopped                 sleep 3000
#Ctrl + Z停止键盘输入
[root@localhost ~]# jobs
[1]   Running                 sleep 6000 &
[2]   Running                 nice -n -5 sleep 6000 &
[3]-  Running                 sleep 7000 &
[4]+  Stopped                 sleep 3000
[root@localhost ~]# bg 4                                        #重新启动后台运行
[4]+ sleep 3000 &
[root@localhost ~]# jobs
[1]   Running                 sleep 6000 &
[2]   Running                 nice -n -5 sleep 6000 &
[3]-  Running                 sleep 7000 &
[4]+  Running                 sleep 3000 &

6、消灭后台进程

kill %2

[root@localhost ~]# kill %2
[root@localhost ~]# jobs
[1]   Running                 sleep 6000 &
[2]   Terminated              nice -n -5 sleep 6000
[3]-  Running                 sleep 7000 &
[4]+  Running                 sleep 3000 &

虚拟文件系统proc

简介

虚拟文件系统:采集服务器自身 内核、进程运行的状态信息

CPU

/proc/cpuinfo

命令:cat /proc/cpuinfo

[root@localhost /]# cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 85
model name  : Intel(R) Xeon(R) Gold 6161 CPU @ 2.20GHz
stepping    : 4
microcode   : 0x1
cpu MHz     : 2200.000
cache size  : 30976 KB
physical id : 0
siblings    : 1
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat md_clear spec_ctrl intel_stibp flush_l1d
bogomips    : 4400.00
clflush size    : 64
cache_alignment : 64
address sizes   : 42 bits physical, 48 bits virtual
power management:

内存

/proc/meminfo

命令:cat /proc/meminfo

内核

/proc/cmdline

命令:cat /proc/cmdline或者ls /boot/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值