进程管理
(一)进程的介绍
程序工作的过程就是进程。我们通过一个图解释程序运行的过程:
解释:假如有一台电脑,在硬盘中有一个程序,当程序运行时,程序中的数据就会从硬盘读取到内存中,并在内存中开辟一个空间给程序运行。假如用户再开一个终端运行程序,内存
就会分配第二块空间给程序运行,进程是程序的实体。进程的特点:
- 当我们运行程序时,系统会给程序分配一个进程编号,即进程ID。如果运行ps aux会看到很多的进程在运行。在windows系统中,输入快捷键win+r就会看到任务管理器中显示的windows正在运行的各个进程,它们有进程编号PID。
- 进程有生命周期,当程序结束运行时,内存中的进程也会消失。
- 进程有父进程与子进程之分,当父进程结束或被杀死时,子进程也不能继续运行。运行pstree可以查看所有的父进程及其子进程。Centos7以前的版本,系统的第一个进程是init进程,但centos7以及centos7后的版本是systemd。
- 当子进程不运行时,子进程与父进程在同一个内存空间,当子进程发生更改时,内存就会给它分配一个独立的空间供其使用。
- 进程的优先级。Linux进程通常优先级分为:
系统优先级:早期centos系统优先级的范围为0-139,centos6以下为0-98。系统优先级的数字越小,优先级越高,就先运行,但并不是谁的优先级高,谁运行的就快。
实时优先级:与系统优先级相反,范围为99-0,值越大优先级越高。它是固定不变的
nice值:-20到19,对就系统优先级100-139或99,是动态的,可变的
UID:代表执行者的身份
PID:代表这个进程的代号
PPID:代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
PRI:代表这个进程的nice值
NI:代表这个进程的nice值
所谓nice值,即表示进程可被执行的优先级的修正数值。PRI值越小越先执行,加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。这样,当nice值为负值时,该进程的优先级值将变小,其越快被执行。
关于优先级的图解:
Windows也有优先级,如图可知,共有六种。
补充:谁有权力运行程序,不是程序决定的,而是由程序的权限决定的,程序的UID、GID和SELinux语境决定对文件系统的存取和访问权限。
进程相关概念:
进程内存:
Page Frame:页框,用存储页面数据,存储Page 4k
LRU: Least Recently Used 近期最小使用算法,释放内存物理地址空间和线性地址空间
原理解释:因为假设物理块有3个,所以最多只能存3个数据,超过就会将数据存到磁盘中。从第2轮开始,3调入之后3在上,4调入之后,4又重新跑到上面,以此规律类推。
MMU:Memory Management Unit负责转换线性和物理地址
TLB:Translation Lookaside Buffer翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存。
进程状态:
Linux内核:抢占式多任务
进程类型:
守护进程:daemon,在系统引导过程中启动的进程,和终端无关进程,在计算机加载的时候,自动进入到后台运行。
前台进程:跟终端相关,通过终端启动的进程,关掉终端,进程也会关闭。
注意:两者可相互转化
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭,表示其本进程或父进程非正常关闭,这样的进程占用内存资源,且无法在复活。
当遇到多个任务要运行时,如果一个父进程不能用,就会出线多个线性进程来运行多个任务,进程是线程的容器。每个线程都是独立的进程。
在/proc目录下,每个数字代表一个进程
查看进程:ps
支持三种选项:
UNIX选项 如-A -e
BSD选项 如a
GNU选项 如–help
选项:默认显示当前终端中的进程:
a 选项包括所有终端中的进程
x 选项包括不链接终端的进程
u 选项显示进程所有者的信息
f 选项显示进程的父进程
k|–sort 属性 对属性排序
o 属性…选项显示定制的信息
进程管理常用的命令:
pgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行。在服务器的配置和管理中,这个工具常被应用。
常用参数:
-l 列出程序名和进程ID
-o 进程起始的ID
-n 进程终止的ID
例:
1)默认只显示ID
[root@localhost misc]# pgrep ssh
976
11241
2)同时显示PID和ProcessName
[root@localhost misc]# pgrep -l ssh
976 sshd
11241 sshd
3)按优先级的关系,显示最小的进程
[root@localhost misc]# pgrep -l -o ssh
976 sshd
4)按优先级的关系,显示最大的进程
[root@localhost misc]# pgrep -l -n ssh
11241 sshd
ps 可以对系统进程监测控制。Ps是显示瞬间行程的状态,并不动态连续;如果想对进程运行时间监控,应该用top工具。
命令参数:
-A 显示所有进程(等价于-e)(utility)
-a 显示一个终端的所有进程,除了会话引线
-N 忽略选择。
-d 显示所有进程,但省略所有的会话引线(utility)
-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)
-p pid 进程使用cpu的时间
-u uid or username 选择有效的用户id或者是用户名
-g gid or groupname 显示组的所有进程。
U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U zhang;(utility)
-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.
-l 长格式(有F,wchan,C 等字段)
-j 作业格式
-o 用户自定义格式。
v 以虚拟存储器格式显示
s 以信号格式显示
-m 显示所有的线程
-H 显示进程的层次(和其它的命令合用,如:ps -Ha)(utility)
e 命令之后显示环境(如:ps -d e; ps -a e)(utility)
h 不显示第一行
例:
标头解释:
USER 用户名
PID 进程ID(Process ID)
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
VSZ 进程所使用的虚拟内存的大小(Virtual Size)
RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节
TTY 与进程关联的终端(tty)
STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)
R 运行 Runnable(on run queue)正在运行或在运行队列中等待
S 睡眠 Sleeping 休眠中,受阻,在等待某个条件的形成或接受到信号
I 空闲 Idle
Z 僵死 Zombie(a defunct process) 进程已经终止,但进程描述符存在,直到父进程调用wait4()系统调用后释放。
D 不可中断 收到信号不唤醒和不可运行,进程必须等待直到有中断发生。
T 终止 Terminate
P 等待交换页
W 无驻留页
X 死掉的进程
< 高优先级进程
N 低优先级进程
L 内存锁页 Lock
s 进程的领导者(在它之下有子进程)
START 进程启动时间和日期
TIME 进程使用的总cpu时间
COMMAND 正在执行的命令行命令
pstree命令以树状图显示进程间的关系。
tty/who/w:
tty: 用来查询目前使用的终端机的文件名称
who: 用来显示系统中有哪些使用者,及其终端
w: 用来显示目前登入系统的用户信息
kill/pkill
kill用于终止指定的进程的运行,也可以用kill向进程发送特定的信号。
参数:
-l 信号,如果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
实例:
1)列出所有信号名称
[root@localhost misc]# kill -l
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
2)先用ps查找进程,然后用kill杀掉
[root@localhost misc]# ps -ef
[root@localhost misc]# kill 19220
- 彻底杀死进程
[root@localhost misc]# kil -9 19220
前后台的切换:
pidof 用于查找一个运行的程序的PID
[root@localhost misc]# pidof ping
19375
Jobs显示后台任务信息
[root@localhost misc]# ping 172.17.0.1
[root@localhost misc]# jobs
[1]+ Running ping 172.17.0.1 &
nohup使程序在后台运行。
[root@localhos t misc]# nohup ping 172.17.0.1
renice: 进程优先级调整:
静态优先级:100-139
进程默认启动时的nice值为0,优先级为120
只有根用户才能降低nice值(提高优先性)
nice: 内核根据进程的nice值决定进程需要多少处理器时间,nice值的取值范围是:-20到20。一个具有-20的nice值的进程有很高的优先级,一个nice值的为20的进程的优先级则很低。
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/86655