day25 进程管理

进程管理

进程介绍

进程/程序的关系

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查看进程

原文地址:https://www.cnblogs.com/zhaocheng690/p/15490226.html