进程管理
程序员文章站
2022-05-13 11:20:07
...
-
CPU
的0
环,用于内核进行操作,比如释放一个寄存器,用户程序使用的CPU
的3
环,当需要和硬件交流的时候,就会调用内核来使用驱动程序,内核管理者系统上运行的每一个进程,当内核占据CPU
时,其余应用程序就会进入排队等待,内核需要保存现场,内核通过内核数据结构保存着运行进程的每一个信息,包括name
,PPID
,PID
,执行到指令的条数,…内核保存这些进程数据是需要占据内存空间的;内核中的记录信息是和用户进程相互对应的; - 使用寄存器来装配指令时,并记录执行的条目和下一条指令的位置,当时间片耗尽时,或者指令执行完成,就会执行下一条指令;为了防止进程之间对于内存空间的占用,将内存分配成线性空间,内核占用一段空间,其余的进程都只认为内存中只有自己和内核,为了提高内存的利用率,使用页面技术将内存划分成页面,一次申请的只有页面数据,这些页面的使用数据保存在内核结构表中,这个结构表中记录页面是由哪个程序使用的;除了页面结构还有逻辑视图:
-
- 进程的地址空间结构
- 进程的地址空间结构
-
forbidden
:表示不允许进程空间使用的; -
program text
:表示程序文本段,这一段是只读段,也表示只读段指令数据; -
intialized data (.data)
:表示初始化的数据, -
unintialized data (.bss)
:表示没有初始化的数据; -
runtime heap
:根据实际的需要,不停的动态申请的空间称为堆内存 -
user stack
:主要是用来存储本地变量的,函数运行时使用的变量; -
Memory mapped region for shared libraries
:程序运行时使用的动态库信息; -
kernel code and data
:内核代码和数据; -
physical memory
:表示物理内存; -
process-specific data
:进程特殊数据 -
-
进程的状态
-
进程的状态
-
Ready
:当获得所需要的资源后,就是可以执行的状态, -
Excuting
:程序执行状态,进程占据实际的CPU
时长,正在运行的时间; -
Uninterruptible
:表示不可中断的睡眠,需要的资源没有满足,即使调度到CPU
上面也没有意义; -
Interruptible
:可以中断的睡眠,指令执行完成,等待下一次执行的的中间时间; -
Stopped
:进程因为资源等原因,停止; Zombie
:表示僵死状态,表示僵尸进程,正常运行,并且结束,但是占据的内存不进行释放,是由于内核无法找到该进程所占用的资源的位置: 一种是可以回收的, 一种是不能进行回收的;Linux的进程知识
当
CPU
被某个进程占用时,网卡需要通信时,网卡上的芯片会向CPU
发起DMA
请求,CPU
会立即终止当前进程,会开始处理网卡进程,将数据进行保存,然后比较进程之间的优先级关系,决定处理网卡进程还是以前正在处理的进程;当系统意外断电后,使用UPS
电源时,内核会通知应用程序,进行系统保护,内核根据系统的优先级进行排队;任何一个进程都是
Init
的子进程;- 进程的优先级关系:
- 进程是存在优先级关系的,进程的优先级
0--->139
,一共140
个值,数值越小,进程的优先级越高,其中0--->99
:是由内核进行调整的,100--->139
:是用户可以进行控制的; - 进程的优先级越高:
- 1.获得更多的
CPU
运行时间; - 2.更多获得运行机会;
- 进程的
nice
:-20--->19
,表示:100--->139
,对于[普通用户仅仅可以调大自己的nice
值,超级用户可以缩小进程的nice
值;
- 1.获得更多的
- 进程是存在优先级关系的,进程的优先级
- 对于进程的
PID
号码是唯一的,即使进程退出,也不会被占用,对于/proc
中的每一个目录对应的就是一个进程; 进程号不一定是连续的,且每一个进程的
PID
是唯一的,即使进程已经结束,也不会释放,init
进程的进程号永远为1
,这里的文件,建议使用cat
来查看;进程的查看
-
ps
:-
Process State
:多种使用风格,System V
风格(选项使用-
引导),BSD
风格; -
-a
:显示所有和终端有关的进程; -
-u
:用于显示是启动进程的用户, -
-x
:显示所有和终端无关的进程; - 进程可以分为和终端有关的进程:终端启动之后,会启动的进程;终端无关的进程:不登录用户就可以自动启动的进程;;
-
-e
:显示所有线程; -
-f
:显示更加详细的信息; -
[]
:表示是内核线程; -
PRI
:表示优先级; -
-elF
: -
-o
:用于指定显示那些字段,可以这样使用ps o pid,comm,ni
;
-
-
ps
输出信息的说明-
USER
:表示进程的用户; -
PID
:表示进程的PID
号码; -
%CPU
:表示对于进程的占有率; -
%MEM
:表示进程对于内存的占有率; -
STAT
:- 表示进程状态
-
D
:表示不可以中断的睡眠; -
R
:表示运行或者就绪; -
S
:表示可以中断的睡眠; -
T
:表示停止的进程; -
<
:表示高优先级的进程; -
N
:表示低优先级的进程; -
l
:表示多线程进程; -
+
:表示前台进程组中的进程,占据终端,从命令行输入; -
s
:表示会话进程的首进程;
-
-
├─sshd───sshd───bash───pstree
:这个进程被结束,所有的子进程都会被结束; -
TTY
:表示和哪个终端相关,?
表示是和终端无关的进程; -
START
:表示进程的启动时间; -
TIME
:表示运行时长,也就是占据CPU
的时长; -
COMMAND
:表示哪个命令启动的进程; - 关于
Mem
的两个解释:-
VSZ
:的计算是包括共享库文件的大小的,包括栈数据和堆数据; -
RSS
:以上计算是不能包括共享库的也不包括可以被交换出去的空间,一般来说只有打开的文件可以被交换出去的,进程的指令,函数都是不能被交换出去的;
-
- 关于
CPU
时长的两个解释:- 进程真正运行了多长时间;
- 进程在
CPU
上面运行了多长时间
-
pstree
: 用于显示进程树;
pgrep
:- 用于显示进程的相关信息,
-
-u
:用于指定某个用户的相关信息,man
文档写的还是很详细的;
Example 1: Find the process ID of the named daemon:
unix$ pgrep -u root named
Example 2: Make syslog reread its configuration file:
unix$ pkill -HUP syslogd
Example 3: Give detailed information on all xterm processes:
unix$ ps -fp $(pgrep -d, -x xterm)
Example 4: Make all netscape processes run nicer:
unix$ renice +4 ‘pgrep netscape‘
-
pidof
:-
find the process ID of a running program
,主要用于查找进程的PID
号码; -
-s
:用于只返回一个返回值pid
;
-
-
top
: - 按照进程使用资源的顺序来进行排序,按照一定的时间进行刷新;
-
display Linux tasks
,
-
13:21:23
- 表示当前时间;
-
23 min
:- 表示运行时长,电脑启动到此刻的时长;
-
1 users
:- 表示登录系统的用户;
-
load average 0.00 0.00 0.00
- 表示平均负载,三个数值表示平均队列长度,过去一分钟,五分钟,十五分钟的队列长度,长度越小
CPU
负载越低;
- 表示平均负载,三个数值表示平均队列长度,过去一分钟,五分钟,十五分钟的队列长度,长度越小
-
Tasks 72 total
:- 表示一共包含
72
个进程 -
1 running:
表示两个运行状态; -
71 sleeping
:表示71
个睡眠进程 -
0 stopped
:表示处于Stopped
进程的状态; -
0 zombie
:表示处于僵尸状态的进程;
- 表示一共包含
-
%Cpu(s)
:- 默认显示的是多个
CPU
的平均值;按1
可以显示多个CPU
的使用情况; -
0.0% us
:user
用户空间的用户进程所占用的CPU
的百分比; -
0.0% sy
:system
内核空间的进程所占用的CPU的百分比; -
0.0% ni
:nice
调整nice
值影响的CPU
的比例; -
98.7% id
:idoel
表示空闲百分比; -
1.7% wa
:wait
:表示等待IO
等各个进程所占的百分比; -
0.0% si
:soft interrupt
表示软中断占据的CPU的百分比; -
0.0% st
:stoled
:表示被偷走的时间,虚拟化中有可能出现;
- 默认显示的是多个
-
Mem
:- 表示内存的使用情况:
-
3762308 total
:内存总数;
-
-
146692 free
:- 内存空闲数;
-
1465452 used
:- 内存已用数;
-
2150164 buff/cache
:- 表示缓冲,以及缓存;
- 表示内存的使用情况:
-
swap
:- 表示交换空间使用;
-
821244 total
:swap
总数 -
3004 free
:swap
使用的: -
1845364 avail Mem
:swap
可用的Mem
;
-
PID
:表示进程PID
-
USER
:表示进程属主; -
PR
:表示进程优先级,RT
:表示实时优先级; -
NI
:表示进程NICE
值; -
RES
:表示进程的常驻内存集合; -
SHR
:表示共享内存的大小; -
S
:表示进程状态; -
%CPU
:CPU
占用率; -
%MEM
:内存占用率; -
TIME+
:使用CPU的
时长; COMMAND
:执行进程的命令;-
top
支持的交互式命令:-
M
:表示按照进程的内存占用率来进行排序的;; -
P
:表示按照CPU
占用率的百分比进行排序; -
T
:表示按照累计时间进行排序 -
l
:表示是否显示平均负载和启动时间; -
t
:是否显示进程和CPU
状态相关信息; -
m
:表示是否显示内存信息; -
c
:是否显示完整的命令行信息; -
q
:表示退出top
; -
k
:表示终止某个进程; -
-d
:用于指定刷新时长的; -
-b
:表示按照批处理模式进行刷新的; -
-n #
:表示显示多少批之后自动进行退出;
-
-
Linux
支持的信号,以及常见一个信号的含义:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
-
1.SIGHUP
:表示进程不用重启,就可以重新读取配置文件,并让新的配置文件生效; -
2.SIGINT
:表示中断,Ctrl+C
表示中断一个前台进程; -
9.SIGKILL
:表示立即杀死一个前台进程,表示强行杀死,容易损坏文件; -
15.SIGTERM
:终止一个进程,提供时间处理子进程以及打开的资源等信息,这个是默认信号; - 给进程发送信号的方式:
- 使用信号号码:
kill -#
; - 使用信号名称:
kill -SIGKILL
; - 信号名称的简写:
kill -KILL
;
- 使用信号号码:
-
killall
:- 可以跟进程名,用于杀死一批进程;
- 关于进程
nice
值的调整 - 如果进程已经启动起来,使用
renice
值:renice Ni PID
;
[root@server23 ~]# pidof crond
1068
[root@server23 ~]# renice 3 1068
1068: old priority 0, new priority 3
[root@server23 ~]# renice -3 1068
1068: old priority 3, new priority -3
- 在启动时,指定
Nice
值
nice -n NI COMMAND
nice -n -3 ls
- 进程前台和后台
- 前台作业:占据了命令提示符;
- 后台作业:启动之后,释放命令提示符,后符操作在系统的后台完成;
- 进程由前台到后台
COMMADN &
将命令执行到后台,释放前台的资源; - 前台到后台的切换:
-
Ctrl+z
:示将已经在前台的作业送完后台; -
COMMAND &
:表示让命令在后台执行; -
fg
用于降进程从后台移动到前台运行; -
bg
:后台的停止作业继续运行; -
jobs
:用于查看后台的所有作业,显示的号码是不同于进程号的;-
+
:表示默认被操作的作业; -
-
:命令将第二个被操作的作业;
-
-
- 如果需要通过这种方式来终止某个进程,使用
kill %jobsID
,可以结束进程作业号码对应的进程; -
vmstat
: - 表示系统状态查看命令;
-
procs
:-
r
:表示运行队列长度; -
b
:表示阻塞队列长度;
-
-
memory
:-
swapd
:表示交换的大小; -
free
:表示空闲内存的大小; -
buff
:表示缓冲的大小; -
cache
:表示用于缓存的大小;
-
-
swap
:-
swapin
:表示交换进入磁盘空间的; -
swapon
:表示交换出去的;
-
-
io
:-
blockin
:表示磁盘块调入内存; -
blockout
:表示磁盘块调出内存;
-
-
system
:-
in
:interput表
示中断的个数; -
cs
:context switch
:表示上下文切换的次数;
-
-
CPU
:-
us
:用户空间占据的CPU
百分比; -
sy
:内核空间占据的CPU
百分比; -
id
:表示空闲百分比; -
wa
:表示等待IO
; -
st
:表示被偷走的CPU
资源;
-
-
uptime
:- 用于显示
top
命令的第一行;
- 用于显示
- 如果需要查看某个进程具体的信息,首先得到进程的
Pid
,然后进入/proc
目录里面,进入对应的进程号码,可以得到对应的详细的信息;
推荐阅读
-
win32api.exe - win32api是什么进程
-
MySQL增多Sequence管理功能
-
python3学习笔记之多进程分布式小例子
-
Winform中设置BackgroundWorker在取消时关闭后台进程
-
阿里怎么发工资?自研薪酬管理系统首次曝光 groovy脚本框架云计算oracle
-
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装
-
SpringBoot | 第二十七章:监控管理之Actuator使用
-
Oracle各后台进程简介
-
WindowsServer2008网络管理资料收集争取做“日拱一卒“_MySQL
-
为什么 PHP 开发和技术管理人才这么难招?