首页 > 代码库 > Linux运维系统工程师系列---14
Linux运维系统工程师系列---14
进程管理
什么是程序?program
程序:完成某个功能的一段代码的集合
什么是进程?
进程是程序运行之后,在内存中的状态
如何产生一个进程?
执行一个程序或者命令就可以产生一个进程
提到进程,不得不说一个目录
/proc:是一个虚拟的文件系统,这个目录下的文件和目录都是保存在内存里的
[root@server102 ~]# ll -d /proc/
dr-xr-xr-x. 157 root root 0 Oct 10 00:33 /proc/
大小是0,根本没有占用磁盘空间,就是假的。
一.进程的查看
进程的查看:
# man ps
ps接受以下三种格式的选项:
1、UNIX格式的,以一个-开始的 ps -a
2、BSD格式的选项,不以-开始 ps aux
3、GNU长格式选项,以--开始 ps --eo
最常用的是ps aux和ps -ef
ps命令:静态的查看进程的状态
ps常用选项:
-e:显示所有进程
-f:全格式显示
a:显示所有进程(包含其他用户的进程)
u:显示有效使用者
x:显示无控制终端的进程,与a一起使用,显示所有进程
[root@server102 ~]# ps -ef | more
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Oct18 ? 00:00:04 /sbin/init
UID——进程的拥有者
PID——进程号
PPID——父进程号
C————CPU使用的资源的百分比
STIME——开始时间
TTY——运行进程的终端的名字 tty1:文本终端 pts:伪终端,虚拟终端
?:表示该进程运行不依赖终端
TIME——命令执行时间
CMD——命令的名字
ps aux:
[root@server102 ~]# ps aux | more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 2900 1228 ? Ss Oct18 0:04 /sbin/init
%CPU——占用CPU的百分比
%MEM——占用内存的百分比
VSZ——占用虚拟内存的大小
RSS——驻留内存大小
TTY——运行进程的终端
STAT——进程的状态
START——进程开始时间
TIME——进程执行时间
COMMAND——命令
[root@server102 ~]# ps auxw #w是宽屏的意思,可以将命令显示全
查看进程树:
[root@server102 ~]# pstree 以树的形式显示正在运行的进程
动态查看进程状态 top
[root@server102 ~]# top
top - 11:27:52 up 3 days, 6:02, 2 users, load average: 0.00, 0.00, 0.00
系统时间 系统连续运行3天,6小时零2分 当前有2个用户登录 系统的平均负载,最近1分钟,5分钟,15分钟的平均负载
Tasks: 143 total, 1 running, 142 sleeping, 0 stopped, 0 zombie
总共有143个进程,其中一个是正在运行的,142个休眠的,0个停止的,0个僵尸进程
Cpu(s): 2.4%us, 0.3%sy, 0.0%ni, 96.9%id, 0.0%wa, 0.3%hi, 0.0%si, 0.0%st
us:用户空间占用的CPU的百分比;
sy:系统空间占用CPU百分比
ni:改变进程优先级的进程所占用的cpu百分比;
id:空闲进程占用空间百分比 idle
wa:IO等待占用CPU百分比
hi:硬中断占用的CPU的百分比
si:软中断占用的CPU的百分比
st:steal
Mem: 1030680k total, 870564k used, 160116k free, 88228k buffers
总共内存,已使用的,空闲的,缓存的
Swap: 2097144k total, 4244k used, 2092900k free, 543036k cached
交换分区总大小,使用的大小,空闲的大小,缓存的交换分区大小
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13098 root 20 0 70604 21m 7592 S 3.0 2.1 10:57.93 Xorg
PR:优先级
NI:谦让值
VIRT:进程使用的虚拟内存的大小
RES:驻留内存大小
SHR:共享内存的大小
S:进程状态
TIME+:进程使用的CPU时间
只动态查看某个进程的状态
top -p pid
[root@server102 ~]# top -p 28550
二.前后台
前台运行——命令会占用运行它的终端,其他人无法再使用此终端
后台运行——命令运行之后,不会占用终端,该终端可以被其他用户使用
前台进程怎么形成?
直接在终端执行命令
[root@server102 ~]# firefox http://172.16.254.253/note/bj.ncd
后台进程怎么形成?
1)命令的调用,就是说执行命令时候,直接放到后台运行
[root@server102 ~]# firefox http://172.16.254.253/note/bj.ncd &
[1] 9834
2)如何将一个已经运行的前台进程转到后台运行
[root@server102 ~]# firefox http://172.16.254.253/note/bj.ncd
^Z 按下【ctrl】+z
[1]+ Stopped firefox http://172.16.254.253/note/bj.ncd
这样执行完,进程会转到后台,但是是停止的状态
查看后台运行进程的状态:
[root@server102 ~]# jobs
[1]+ Stopped firefox http://172.16.254.253/note/bj.ncd
前后台运行相关的命令:
bg:指定任务在后台运行
——激活后台停止的进程
[root@server102 ~]# bg %1
[1]+ firefox http://172.16.254.253/note/bj.ncd &
[root@server102 ~]# jobs
[1]+ Running firefox http://172.16.254.253/note/bj.ncd &
fg:激活后台命令,变成前台运行
[root@server254 ~]# fg %1
firefox http://172.16.254.253/note/bj.ncd
disown:将目标任务从列表删除,只是不能用jobs来查看了,但是可以用ps -ef查到该进程
[root@server102 ~]# fg %1
firefox http://172.16.254.253/note/bj.ncd
^Z
[1]+ Stopped firefox http://172.16.254.253/note/bj.ncd
[root@server102 ~]# bg %1
[1]+ firefox http://172.16.254.253/note/bj.ncd &
[root@server102~]# disown %1
[root@server102 ~]# jobs
[root@server102 ~]# ps -ef | grep firefox | grep -v grep
root 9940 9927 0 11:51 pts/0 00:00:00 /usr/lib/firefox/firefox
前后台运行,终端一关闭,进程就终止。
保证关闭终端后,进程依然继续运行呢?
[root@server102 ~]# nohup firefox http://172.16.254.253/note/bj.ncd &
关闭终端,再查看进程,依然在
[root@server102 ~]# ps -ef | grep firefox | grep -v grep
root 10291 1 2 13:38 ? 00:00:01 /usr/lib/firefox/firefox
三.进程的终止
进程间的通信(IPC:Interconnect Progress Communication)
进程间通信方式:
1、信号 signal
2、消息 message
3、共享内存 shared memory
常用的信号的含义:
[root@server102 ~]# 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
1)SIGHUP(1):重新读取配置。不停服务的情况下,重新读取配置
2)SIGINT(2):中断,ctrl+c
3)SIGKILL(9):杀死进程,必死无疑的
4)SIGTERM(15):终止进程,但是进程不一定被终结。
强制结束
1)遇到再说
2)例子:ctrl+c
一个标签:[root@server102 ~]# sleep 300
另一个标签:[root@server102 ~]# ps aux | grep sleep | grep -v grep
root 10378 0.0 0.0 4064 524 pts/0 S+ 13:47 0:00 sleep 300
[root@server102 ~]# kill -2 10378
3)kill -9 pid
[root@server102 ~]# ps -ef | grep firefox
root 10291 1 0 13:38 ? 00:00:01 /usr/lib/firefox/firefox http://172.16.254.253/note/bj.ncd
root 10406 10333 0 13:49 pts/0 00:00:00 grep firefox
[root@server102 ~]# kill -9 10291
[root@server102 ~]# ps -ef | grep firefox
root 10410 10333 0 13:49 pts/0 00:00:00 grep firefox
4)不常用,先不说
其他相关命令:
killall:
[root@server102 test]# cat loop.sh
#! /bin/bash
while true
do
echo hello > /dev/null
done
/dev/zero:无穷多个0
/dev/null:不管你扔进去什么都是空,“黑洞”
[root@server102 test]# ps -ef | grep loop
root 10505 10333 98 13:53 pts/0 00:01:10 /bin/bash /test/loop.sh
root 10523 10333 0 13:54 pts/0 00:00:00 grep loop
[root@server254 test]# ps -ef | grep loop
root 10505 10333 94 13:53 pts/0 00:01:21 /bin/bash /test/loop.sh
root 10527 10379 36 13:54 pts/1 00:00:01 /bin/bash /test/loop.sh
root 10529 10333 0 13:54 pts/0 00:00:00 grep loop
[root@server254 test]# killall loop.sh
[2]+ Terminated /test/loop.sh
[root@server102 test]# ps -ef | grep loop
root 10535 10333 0 13:55 pts/0 00:00:00 grep loop
xkill:杀死图形化资源
运行之后,鼠标会由箭头变成一个“X”,点什么什么死
四.程序运行的nice值
nice:谦让值
作用:
指定或者调整用户进程的nice值
nice值越高,抢占资源的能力就越弱;
nice值越低,抢占资源的能力越强。
1、相关命令
nice:运行程序的时候设置谦让值
格式:
nice -n num command
renice:对已经运行的进程修改谦让值
格式:
renice num pid 或者 renice -n num -p pid
2、举例
1)使用nice直接指定
[root@server102 test]# nice -n 7 ./loop.sh &
[1] 10615
[root@server102 test]# nice -n 14 ./loop2.sh &
[2] 10623
[root@server102 test]# top 查看抢占CPU资源的情况
2)使用renice调整运行中的nice值
[root@server102 test]# renice 19 10615
[root@server102 test]# top
10615: old priority 7, new priority 19
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10623 root 34 14 5068 1192 1052 R 70.4 0.1 0:49.70 loop2.sh
10615 root 39 19 5068 1192 1052 R 23.6 0.1 3:34.91 loop.sh
本文出自 “空谷幽兰” 博客,请务必保留此出处http://2489843.blog.51cto.com/2479843/1538104