进程管理是什么
进程是加载到内存中的一段指令
进程是一个程序运行的一个实例
pid 进程号,识别进程的唯一标识,每个进程的ID不一样
uid gid selinux 上下文决定文件系统的存取权限
通常继承执行用户的权限
子进程继承父进程的属性信息
PS命令
在ps aux 中的列的意义:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.8 0.0 189432 5876 ? Ss 09:51 3:13 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0.0 0.0 0 0 ? S 09:51 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< 09:51 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< 09:51 0:00 [rcu_par_gp] root 6 0.0 0.0 0 0 ? I< 09:51 0:00 [kworker/0:0H-ev] root 8 0.0 0.0 0 0 ? I< 09:51 0:00 [mm_percpu_wq] root 9 0.0 0.0 0 0 ? I 09:51 0:00 [rcu_tasks_kthre] root 10 0.0 0.0 0 0 ? I 09:51 0:00 [rcu_tasks_rude_] root 11 0.0 0.0 0 0 ? I 09:51 0:00 [rcu_tasks_trace] root 12 0.0 0.0 0 0 ? S 09:51 0:03 [ksoftirqd/0]
USER 进程的拥有人(一般谁来启动谁就是拥有人)一般针对服务而言会寻找一个普通用户的权限来管理,安全性高
PID 进程的id reload不更pid的重启 restart更改pid的重启
%CPU CPU的使用率
%MEM 内存的使用率
VSZ 虚拟内存,开启一个应用申请的内存。
RSS 实际使用内存
TTY 该进程运行在哪个终端上
tty1 每个控制台都是一个tty,tty1.tty2,tty3(ctrl+alt+f123)
?是指进程不属于任何终端,说明是一个内核态进程
pty是伪终端,一般在图形界面开启的一个终端或者远程时开启的终端被成为伪终端
STAT 表示进程的状态(休眠不需要占用内存资源)
-
D:不可中断的休眠
-
R:当前进程正在运行当中
-
S:休眠
-
T:被暂停的进程
-
Z:僵尸进程
-
<:优先级较高
-
s:会话的领导者
-
+:后台进程
-
N:低优先级
START 进程的开启时间
TIME 进程持续运行的时间
COMMAND 进程名
PPID 父进程的pid
ps aux 查看系统进程
ps的选项:
-可以省略
a 所有的终端进程
u:打印所有者的信息
x:查看不属于任何进程的信息
e:查看系统所有的进程
f:查看额外的信息
o:指定格式输出
--sort 按照一定的顺序排序,例如:--sort=-%mem对内存进行从大到小降序
进程:
进程的拥有人,进程携带的uid只有一个但是携带的gid有一个到多个
top 实时监控
top - 20:39:07(登录的时间) up 36 min(运行的时间), 1 user(几个用户登录), load average: 0.00, 0.00, 0.00(负载的情况)
Tasks: 342 total(运行了几个进程), 1 running, 341 sleeping, 0 stopped(停止), 0 zombie
%Cpu(s): 0.3 us(用户使用的百分比,如果数值高说明应用使用高), 2.2 sy(系统使用的百分比,如果数值高说明内核使用频率高), 0.0 ni(优先级), 96.8 id(空闲率), 0.0 wa, 0.5 hi, 0.2 si, 0.0 st(虚拟化使用的cpu)
MiB Mem : 1805.1 total一种多少内存, 154.3 free(空闲), 1320.3 used(使用), 330.5 buff/cache
MiB Swap: 2096.0 total, 1951.5 free, 144.5 used. 306.7 avail Mem
top -d x 刷新时间为x秒
top -p x,y 监控pid为x,y的进程(可以单个用也可以多个用)
交互式:
按c 显示完整的命令
按1 显示全部cpu的使用情况
按T 根据时间/累计时间进行排序
按M 可以按照内存
按P 根据cpu使用百分比大小进行排序
按f 可以选择显示的内容
一般同一个进程名 有多个pid时,pid最小的为父进程
pgrep(通过程序的名字来查询进程的工具)
pgrep -G 参数 查找参数这个组进程的pid pgrep -U namd 过滤出namd进程的pid pgrep -P 根据父进程pid查找出所有子进程的pid pgerp -i 不仅打印pid还打印进程名 pgrep -o 如果该程序有多个进程在运行则查找最先启动的 pgrep -n 如果该程序有多个进程在运行则查找最后启动的 pgrep -d 定义过滤出的内容的分隔符 默认换行符 pgrep -u -l root 显示和root用户有关的进程的名称和pid pidof 查找准确进程名的pid 例:ps -p $(pidof named)
信号:
signal 15 #终止(默认) signal 9 # 立即终止 signal 1 # 重读配置文件 signal 19 #暂停任务 kill -15 进程的pid # 结束进程(默认) kill -9 进程pid # 强制结束 kill -1 进程pid # 重新加载服务 相当于systemctl reload servicename kill -19 进程pid #kill是用来给进程发送信号的命令 kill -l 查看kill支持的所有信号 通过pid:kill -信号 pid 通过名称:killall -信号 进程名 通过模式:pkill -信号 和pgrep用法一样(参考pgrep) pkill -9 -U user1 杀死user1的进程 pkill -t 终端名称 可以把占据终端的用户下线 #pkill是模糊匹配,killall是精确匹配
cpu的工作原理:
用来对内存当中的应用进行计算,
一个cpu在同一时刻只能计算一个任务,
1:采用轮询算法 (现在cpu默认算法)
2:fifo算法 先进先出
进程调度优先级:(临时生效)
静态优先级
-
进程调度优先级决定对cpu的访问
-
进程的nice值影响优先级
-
范围是-20--19 缺省为0
-
低nice值有高优先级
-
默认nice值为0
动态优先级
-
由内核去进行管理和调度
启动后修改:
renice -n -5 $(pidof vim) #将vim的优先级改到-5 启动时修改: nice -n -10 vim /etc/passwd # 在启动时把优先级更改为-10
任务控制:
命令最后加上&符号会直接把任务放在后台运行
jobs # 查看后台运行的进程
后台任务管理
ctrl+z # 将前台运行的进程在后台暂停 kill -19 %x # 暂停后台运行编号为x的进程 bg %x # 在后台运行编号为x的进程 fg %x # 在前台运行编号为x的进程
如果任务放在了后台,当终端被关掉之后,后台的任务也会被关闭
用户进程
w 查看谁在登录 last 重启和登录的记录 lastb 查看登录失败的记录 lastlog 查看用户登录日志