什么是进程
进程是已启动的可执行程序的运行实例,进程有以下组成部分:
- 一个文件;
- 被配内存的地址空间;
- 有权限限制;
- 程序代码的一个或多个副本(也叫执行线程);
- 像人一样拥有状态;
process status
- PID、PPID
- 当前进程状态
- 内存分配情况
- CPU和已花费的实际时间
- 用户UID,它决定进程的特权
- 进程名称
- RSS:占用实际内存
- VSZ:占用虚拟内存
- TTY:进程运行的终端
- START:进程的启动时间
- TIME:进程占用CPU的总时间
- COMMAND:进程文件、进程名
进程生命周期
父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。
每个新进程分配一个,唯一的进程ID(PID),满足跟踪安全性之需。
任何进程都可以创建子进程。
所有的进程都是第一个系统进程的后代。
cpu正在读的是活的(running)
进程状态
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
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
- 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在一个时间点只能处理一个进程,通过实践分片技术,来同时运行多个程序。
优先级范围和特性
范围
在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
作业控制
sleep 20命令会占领前台
使用&符号,将命令扔到后台
简介:
作业控制是一个命令行功能,也叫后台运行
关键词介绍:
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/