进程:
定义:进程也就是cpu未完成的工作。这和我们windows里面的进程概念基本类似。
ps命令:
ps
a 关于当前shell运行的所有进程
x | -A 所有进程,x显示状态-A不会。这是两个命令
f 显示进程从属关系
e 显示进程调用环境工具的详细信息
l 长列表显示进程的详细信息
u 显示进程的用户信息
-a 显示shell前台运行命令的进程,但不包括shell本身
下图ps a等命令由于进程过多就不展示结果了,命令的格式如下:
ps的相关命令操作:
[root@desktop21 Desktop]# whatis ps 查看ps命令的含义
ps (1) - report a snapshot of the current processes.
ps (1p) - report process status
[root@desktop21 Desktop]# ps
PID TTY TIME CMD
886 pts/1 00:00:00 ps
2791 pts/1 00:00:00 bash
[root@desktop21 Desktop]# ps a 关于当前shell运行的所有进程
PID TTY STAT TIME COMMAND
[root@desktop21 Desktop]# ps ae 关于当前shell运行的所有进程运行环境的详细信息
PID TTY STAT TIME COMMAND
[root@desktop21 Desktop]# ps aef 关于当前shell运行的所有进程运行环境以及进程附属关系(简略显示几行,不然看起来太多太复杂)
PID TTY STAT TIME COMMAND
[root@desktop21 Desktop]# ps -A | head -n 2 显示所有进程
PID TTY TIME CMD
1 ? 00:00:01 systemd
[root@desktop21 Desktop]# ps x | head -n 2 显示所有进程,还有状态显示(与ps -A的区别)
PID TTY STAT TIME COMMAND
1 ? Ss 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 19
[root@desktop21 Desktop]# ps -a 显示shell前台运行命令的进程,但不包括shell本身
PID TTY TIME CMD
904 pts/1 00:00:00 ps
3067 pts/0 00:00:00 su
3068 pts/0 00:00:00 bash
[root@desktop21 Desktop]# bash 重新打开shell
[root@desktop21 Desktop]# ps -a 显示shell前台运行命令的进程,但不包括shell本身
PID TTY TIME CMD
905 pts/1 00:00:00 bash
938 pts/1 00:00:00 ps
3067 pts/0 00:00:00 su
3068 pts/0 00:00:00 bash
ps -o %cpu,%mem,user,group,comm,nice,pid,stat
指定显示进程的某些信息
[root@desktop21 Desktop]# ps -o comm 指定显示进程名称。
COMMAND
bash
ps
bash
%cpu 显示进程cpu负载
%mem 显示进程内存负载
user 进程用户
group 进程组
comm 进程名称
nice 进程优先级
pid 进程的id
stat 进程状态
stat中显示的信息
S 进程状态
l 内存中有锁定空间
N 优先级低
< 优先级高
+ 前台运行
s 顶级进程
ps ax -o %cpu,comm --sort <+|-%cpu > <+|-%mem> 按照进程信息排序
+ 正序
- 倒序
%cpu cpu负载排序
%mem 内存负载
具体操作演示:
[root@desktop21 Desktop]# ps ax --sort=%mem 按照内存负载排序
PID TTY STAT TIME COMMAND
2 ? S 0:00 [kthreadd]
3 ? S 0:00 [ksoftirqd/0]
[root@desktop21 Desktop]# ps ax --sort=-%mem -o %mem 按照内存负载进行倒序排序
%MEM
20.9
4.1
[root@desktop21 ~]# ps ax --sort=-%mem -o %mem,comm 按照内存负载进行倒序排序同时显示进程名称。
%MEM COMMAND
20.9 gnome-shell
4.1 Xorg
[root@desktop21 ~]# ps ax --sort=-%cpu -o pid | head -n 6 | tail -n 5 ax所有程序 --sort=-%cpu按照cpu逆序排序 按照pid顺序,方法一。
1865
595
1
2
3
[root@desktop21 ~]# ps ax --sort=-%cpu -o pid,%cpu|awk 'NR<=6&&NR>=2{print}' 方法二。
1865 0.7
595 0.1
1 0.0
2 0.0
3 0.0
进程优先级:
1.进程的优先级范围
-20~19
2.优先级查看
ps ax -o pid,nice,comm
3.指定某个优先级开启进程
nice -n 优先级数字 进程名称
nice -n -5 vim & 开启vim并且指定程序优先级为-5
4.改变进程优先级
reince -n 优先级数字 进程pid
renice -n -5 1806 改变1806进程的优先级为-5
相关具体操作:
[root@desktop21 ~]# renice -n 0 1128 改变1128的优先级为0
1128 (process ID) old priority 0, new priority 0
[root@desktop21 ~]# renice -n -1 905 改变905的优先级为-1
905 (process ID) old priority 0, new priority -1
下图展示我们使用renice更改bash优先级之后,优先级从0变成了-6
[root@desktop21 ~]# nice -n -5 vim & 指定优先级建立文件
[1] 1148
[root@desktop21 ~]# renice -n -5 1159 改变1159的优先级为-5
1159 (process ID) old priority -1, new priority -5
[root@desktop21 ~]# ps -o nice,comm,pid,stat 查看1159的优先级
NI COMMAND PID STAT
-1 bash 905 S<
-5 vim 1159 T<
-1 ps 1163 R<
0 bash 2791 Ss
[root@desktop21 ~]# nice -n 5 vim & 以-5的优先级建立文件
[1] 1164
环境中进程的前后台调用:
[root@desktop21 Desktop]# jobs 查看被打入环境后台的进程
[root@desktop21 Desktop]# fg 2 把序号2后台进程调回前台
bash: fg: 2: no such job
jobs 查看被打入环境后台的进程
ctrl+z 把占用终端的进程打入后台
fg jobsnum 把后台进程调回前台
bg jobsnum 把后台暂停的进程运行
comm & 让命令直接在后台运行
相关具体命令操作:
[root@desktop21 ~]# gedit 占用后台打开一个文件
** (gedit:1339): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-Py9xsAJdi1: Connection refused
^Z
[1]+ Stopped gedit
[root@desktop21 ~]# jobs 查看被打入环境后台的进程
[1]+ Stopped gedit
[root@desktop21 ~]# vim & 在后台打开文件
[2] 1344
[root@desktop21 ~]# jobs 查看被打入环境后台的进程
[1]- Stopped gedit
[2]+ Stopped vim
[root@desktop21 ~]# bg 1 把后台暂停的进程1运行
[1]- gedit &
[root@desktop21 ~]# fg 2 把后台进程2调回前台
vim
[root@desktop21 ~]# fg 1 把后台进程1调回前台
gedit
^Z
[1]+ Stopped gedit
[root@desktop21 ~]# jobs
[1]+ Stopped gedit
[root@desktop21 ~]# fg
gedit
^Z
[1]+ Stopped gedit
进程信号:
1.常用信号等级
1 进程不结束仅仅重新加载配置
2 删除进程在内存中的数据
3 删除鼠标在内存中的数据
9 强行结束单个进程(不能被阻塞)
15 正常关闭进程 (可能会被阻塞)
18 运行暂停的进程
19 暂停某个进程 (不能被阻塞)
20 把进程打入后台 (可以被阻塞)
man 7 signal 查看信号详细信息
第二张图为信号的详细信息:
kill -信号 进程pid 结束单一进程
killall -信号 进程名字 结束同一名字的进程
pkill -u student -信号 切换到普通用户关闭vim同时关闭student的shell