0%

进程管理

进程管理

1.进程的管理:

当我们运行一个程序,那么我们将该程序叫进程
进程 线程 协程

2.为什么要学进程管理?

为了管理架构的服务

3.程序和进程的区别

1)程序:开发写出来的代码,程序是永久存在的。
2)进程:它会随着程序的终止而销毁。

4.进程的生命周期

1.当父进程接收到任务调度时,会通过fork派生子进程来处理,那么子进程会继承父进程的衣钵。
2.子进程在处理任务代码时,父进程会进入等待的状态...
3.如果子进程在处理任务过程中,父进程退出了,子进程没有退出,那么这些子进程就没有父进程来管理了,就变成了僵尸进程。
4.每个进程都会有自己的PID号,(process id)子进程则PPID

5.进程管理命令(静态管理):ps

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
a:显示所有与终端相关的进程
u:显示用户
x:显示所有与终端无关的进程

#用户
USER
#进程号
PID
#占CPU的百分比
%CPU
#占内存的百分比
%MEM
#虚拟内存
VSZ
#物理内存
RSS
#该进程在哪个终端运行
TTY
tty1: 物理机的终端
pts/0: 远程连接的终端
?: 内核运行的终端


#状态
STAT
S:进入睡眠状态的进程
s:父进程
R:正在运行的进程
D:不可中断的进程
N:优先级低
<:优先级高
l:多线程的
+:在前台运行的进程
T:暂停,停止的进程
Z:僵尸进程



L:页被锁进内存
|:多进程的

#进程启动时间
START
#进程使用CPU的时间
TIME
#程序运行的命令
COMMAND

进程相关的命令:

1.按照某一列排序:

1
[root@oldboyedu ~]# ps aux --sort vsz

2.指定想查看的列

1
[root@oldboyedu ~]# ps axo user,pid,vsz,command

3.查看子进程

1
2
3
4
5
6
[root@oldboyedu ~]# ps auxf |grep [n]ginx
root 119884 0.0 0.1 125108 2256 ? Ss 10:06 0:00 nginx: master process /usr/sbin/nginx
nginx 119885 0.0 0.1 125496 3140 ? S 10:06 0:00 \_ nginx: worker process
nginx 119886 0.0 0.1 125496 3140 ? S 10:06 0:00 \_ nginx: worker process
nginx 119887 0.0 0.1 125496 3140 ? S 10:06 0:00 \_ nginx: worker process
nginx 119888 0.0 0.1 125496 3140 ? S 10:06 0:00 \_ nginx: worker process

4.额外命令:pstree

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
查看进程树:
[root@oldboyedu ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─abrt-watch-log
├─abrtd
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─irqbalance
├─master─┬─pickup
│ └─qmgr
├─nginx───4*[nginx]
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash───pstree
│ └─sshd───bash───bash───bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─vmtoolsd───{vmtoolsd}
└─vsftpd

#默认不加选项是查看进程的pid
[root@oldboyedu ~]# pgrep -l -a nginx
[root@oldboyedu ~]# pgrep sshd
119346
120226
120254
[root@oldboyedu ~]# pgrep -l sshd
119346 sshd
120226 sshd
120254 sshd
[root@oldboyedu ~]# pgrep -l -a sshd
119346 /usr/sbin/sshd -D
120226 sshd: root@pts/0
120254 sshd: root@pts/1

-a:查看进程的运行命令
-l:查看进程名字
-u:指定用户

[root@oldboyedu ~]# pidof sshd
120254 120226 119346

5.top命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
第一行内容:
当前系统时间 服务器运行时间 有3个用户在登录
top - 10:54:23 up 1 day, 17:56, 3 users,

#平均负载(系统)
load average: 0.00, 0.01, 0.05

第二行内容:

总共122个任务 1个正在运行(R) 121个进入睡眠状态的(S) 没有停止(T) 0个僵尸进程(Z)
Tasks: 122 total, 1 running, 121 sleeping, 0 stopped, 0 zombie

第三行内容:
用户态 内核态 优先级 空闲 等待(wait) 硬中断 软中断 虚拟机占用物理机CPU的百分比
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

第四行:内存
KiB Mem : 2028116 total, 150780 free, 144108 used, 1733228 buff/cache

第五行:swap虚拟内存
KiB Swap: 2097148 total, 2097148 free, 0 used. 1645080 avail Mem

第六行:

进程号 用户 优先级 虚拟内存 物理内存 共享内存 状态 占CPU的百分比 占内存的百分比
PID USER PR NI VIRT RES SHR S %CPU %MEM

运行时间 进程的运行命令
TIME+ COMMAND

中断:硬中断
中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响设备的请求

软中断:
事实上,为了解决中断处理程序执行过长的和丢失中断的问题,Linux将中断处理过程分成了两个阶段:
第一阶段:用来快速处理(硬中断)中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关工作
第二阶段:用来延迟处理第一阶段未完成的工作,通常以内核线程的方式运行。

top命令使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
命令行
-d:指定刷新时间
-p:指定pid
-u:指定用户
-b:保存到文件中
-n:指定次数
---------------------------------------------------------------------------------------------
top内使用
z:高亮显示
b:运行的进程,高亮显示
s:修改刷新时间
M:按照内存排序
P:按照CPU排序
R:倒叙
f:自定义显示字段
q:退出

kil信号管理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
	1:重新加载
2:类似于ctrl + c
3:正常终止进程
9:强制杀死(少用)
15:默认信号,进程终止


不常用
18:重新唤起停止的进程
19:直接暂停
20:把进程放到后台并暂停

pkill
-t:指定终端
-9:强制,把终端运行的命令和终端一并杀掉


killall
接进程的名字