进程管理
进程介绍
进程/程序的关系
1.开发写好的代码,没有运行的时候,只是静态文件,我们称之为程序,程序是数据和指令的集合。
2.当我们把开发好的代码程序运行起来的时候,我们称之为进程。
3.当程序运行的时候系统会为进程分配Pid,运行用户,分配内存等资源。
进程的生命周期
1.当程序运行的时候会由父进程通过fock创建子进程来处理任务。
2.子进程被创建后开始处理任务,当任务处理完毕后就会退出,然后子进程会通知父进程来回收资源。
3.如果子进程处理任务期间,父进程意外终止了,那么这个子进程就变成了僵尸进程。
如何查看当前终端的进程号和父进程号
查看当前进程号:echo $BASHPID
查看父进程号:echo $PPID
进程监控命令
在程序运行后,我们如何了解进程的各种状态呢,这就需要使用各种查看进程状态的命令来查看了
ps查看当前的进程状态-最常用
命令作用:
PS process state 进程状态
打印出进程当前运行的状态快照,并不是实时的监控,而是某一时刻进程快照
常用参数:
#unix风格
a #显示包含所有终端中的进程
u #此选项使ps列出您拥有的所有进程(与ps相同的EUID),或与a选项一起使用时列出所有进程。
x #显示进程所有者的信息
f #显示进程树
o #属性,显示定制的信息
k #属性,对属性进行排序,属性前加-表示倒叙
--sort
#使用标准语法查看系统上的每个进程
-e #显示所有进程
-f #显示完整格式程序信息
-p #显示pid的进程
-C #指定命令
-q #指定id
-t #指定终端机编号,并列出属于该终端机的程序状况
运行结果:
[root@centos7-100 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 128160 6816 ? Ss 9月29 1:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 9月29 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 9月29 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 9月29 0:04 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 9月29 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 9月29 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 9月29 0:17 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 9月29 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 9月29 0:02 [watchdog/0]
[root@centos7-100 ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 9月29 ? 00:01:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 9月29 ? 00:00:00 [kthreadd]
root 4 2 0 9月29 ? 00:00:00 [kworker/0:0H]
root 6 2 0 9月29 ? 00:00:04 [ksoftirqd/0]
root 7 2 0 9月29 ? 00:00:00 [migration/0]
root 8 2 0 9月29 ? 00:00:00 [rcu_bh]
root 9 2 0 9月29 ? 00:00:17 [rcu_sched]
root 10 2 0 9月29 ? 00:00:00 [lru-add-drain]
root 11 2 0 9月29 ? 00:00:02 [watchdog/0]
root 13 2 0 9月29 ? 00:00:00 [kdevtmpfs]
root 14 2 0 9月29 ? 00:00:00 [netns]
root 15 2 0 9月29 ? 00:00:00 [khungtaskd]
root 16 2 0 9月29 ? 00:00:00 [writeback]
root 17 2 0 9月29 ? 00:00:00 [kintegrityd]
root 18 2 0 9月29 ? 00:00:00 [bioset]
状态解释:
USER #启动进程的用户
PID #进程id号
%CPU #进程占用的cpu百分比
%MEM #进程占用内存百分比
VSZ #进程申请占用的虚拟内存大小,单位kb
RSS #进程实际占用的物理内存实际大小,单位kb
TTY #进程运行的终端,?表示为内核程序,与终端无关
STAT #进程运行中某个状态,可以man ps关键词/state查询详细帮助手册
START #进程启动时间
TIME #进程占用cpu时间
COMMAND #程序运行的指令[]表示属于内核态的进程。没有[]表示用户进程
####进程状态
D:不可中断睡眠
R:正在运行
S:可中断睡眠
T:进程被暂停
Z:僵尸进程
####进程字符
<:高优先级进程 S<表示优先级较高的进程
N:低优先级进程 SN表示优先级较低的进程
s:子进程发起者 Ss表示父进程
l:多线程进程 Sl表示进程以多线程运行
+:前台进程 R+表示该进程在前台运行,一旦终止,数据丢失
案例演示:
1.查看进程的父子关系
ps auxf
2.查看进程的特定属性
ps axo pid,cmd,%cpu,%mem
3.按cpu利用率排序
ps axo pid,cmd,%cpu,%mem k -%cpu
4.按内存使用倒叙排序
ps axo pid,cmd,%cpu,%mem --sort %mem
5.列出指定用户名和用户id的进程
ps -fu oldboy
ps -fu 1000
6.查看指定进程id对应的子进程
ps -fp pid
7.查找指定父进程id下的所有子进程
ps -f --ppid pid
8.按照tty显示所属进程
ps -ft pts/1
9.根据进程名查找所属oid
ps -C sshd -o pid=
10.根据pid查找运行的命令
ps -p PID -o comm=
[root@centos7-100 ~]# ps -p 1 -o comm=
systemd
pstree 查看进程层级关系
yum provides pstree
yum install psmisc -y
pstree列出父进程与子进程的关系
不加参数
pstree
显示进程pid
pstree -p
根据进程所属用户查找
pstree -p oldboy
根据进程pid 查找
1.先使用find查找nginx.pid文件
[root@centos7-100 ~]# find / -type f -name "nginx.pid"
/opt/nginx-1.19.9/logs/nginx.pid
2.使用字符拼接找到父进程与子进程关系
[root@centos7-100 ~]# pstree -p $(cat /opt/nginx-1.19.9/logs/nginx.pid)
nginx(40926)───nginx(40927)
pidof 查看指定名称进程的进程号
命令作用:
显示指定程序的pid
举例:
pidof nginx
[root@centos7-100 ~]# pidof nginx
40927 40926
[root@centos7-100 ~]# pidof sshd
44313 44306 30666 1010
top查看当前的进程状态
命令作用:
展示进程动态的实时数据
常用参数:
-d #指定刷新时间,默认3秒
-n #刷新多少次后退出
-p #指定pid
内置命令:
#帮助
h/? #查看帮助
q/esc #退出帮助
#排序
P #按CPU使用百分比排序输出
M #按内存使用百分比排序输出
#显示
1
htop
lsof查看进程