进程管理
什么是程序?program
程序:完成某个功能的一段代码的集合
什么是进程?
进程是程序运行之后,在内存中的状态
如何产生一个进程?
执行一个程序或者命令就可以产生一个进程
提到进程,不得不说一个目录
/proc:是一个虚拟的文件系统,这个目录下的文件和目录都是保存在内存里的
[[email protected] ~]# 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一起使用,显示所有进程
[[email protected] ~]# 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:
[[email protected] ~]# 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——命令
[[email protected] ~]# ps auxw #w是宽屏的意思,可以将命令显示全
查看进程树:
[[email protected] ~]# pstree 以树的形式显示正在运行的进程
动态查看进程状态 top
[[email protected] ~]# 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
[[email protected] ~]# top -p 28550
二.前后台
前台运行——命令会占用运行它的终端,其他人无法再使用此终端
后台运行——命令运行之后,不会占用终端,该终端可以被其他用户使用
前台进程怎么形成?
直接在终端执行命令
[[email protected] ~]# firefox http://172.16.254.253/note/bj.ncd
后台进程怎么形成?
1)命令的调用,就是说执行命令时候,直接放到后台运行
[[email protected] ~]# firefox http://172.16.254.253/note/bj.ncd &
[1] 9834
2)如何将一个已经运行的前台进程转到后台运行
[[email protected] ~]# firefox http://172.16.254.253/note/bj.ncd
^Z 按下【ctrl】+z
[1]+ Stopped firefox http://172.16.254.253/note/bj.ncd
这样执行完,进程会转到后台,但是是停止的状态
查看后台运行进程的状态:
[[email protected] ~]# jobs
[1]+ Stopped firefox http://172.16.254.253/note/bj.ncd
前后台运行相关的命令:
bg:指定任务在后台运行
——激活后台停止的进程
[[email protected] ~]# bg %1
[1]+ firefox http://172.16.254.253/note/bj.ncd &
[[email protected] ~]# jobs
[1]+ Running firefox http://172.16.254.253/note/bj.ncd &
fg:激活后台命令,变成前台运行
[[email protected] ~]# fg %1
firefox http://172.16.254.253/note/bj.ncd
disown:将目标任务从列表删除,只是不能用jobs来查看了,但是可以用ps -ef查到该进程
[[email protected] ~]# fg %1
firefox http://172.16.254.253/note/bj.ncd
^Z
[1]+ Stopped firefox http://172.16.254.253/note/bj.ncd
[[email protected] ~]# bg %1
[1]+ firefox http://172.16.254.253/note/bj.ncd &
[[email protected]~]# disown %1
[[email protected] ~]# jobs
[[email protected] ~]# ps -ef | grep firefox | grep -v grep
root 9940 9927 0 11:51 pts/0 00:00:00 /usr/lib/firefox/firefox
前后台运行,终端一关闭,进程就终止。
保证关闭终端后,进程依然继续运行呢?
[[email protected] ~]# nohup firefox http://172.16.254.253/note/bj.ncd &
关闭终端,再查看进程,依然在
[[email protected] ~]# 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
常用的信号的含义:
[[email protected] ~]# 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
一个标签:[[email protected] ~]# sleep 300
另一个标签:[[email protected] ~]# ps aux | grep sleep | grep -v grep
root 10378 0.0 0.0 4064 524 pts/0 S+ 13:47 0:00 sleep 300
[[email protected] ~]# kill -2 10378
3)kill -9 pid
[[email protected] ~]# 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
[[email protected] ~]# kill -9 10291
[[email protected] ~]# ps -ef | grep firefox
root 10410 10333 0 13:49 pts/0 00:00:00 grep firefox
4)不常用,先不说
其他相关命令:
killall:
[[email protected] test]# cat loop.sh
#! /bin/bash
while true
do
echo hello > /dev/null
done
/dev/zero:无穷多个0
/dev/null:不管你扔进去什么都是空,“黑洞”
[[email protected] 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
[[email protected] 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
[[email protected] test]# killall loop.sh
[2]+ Terminated /test/loop.sh
[[email protected] 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直接指定
[[email protected] test]# nice -n 7 ./loop.sh &
[1] 10615
[[email protected] test]# nice -n 14 ./loop2.sh &
[2] 10623
[[email protected] test]# top 查看抢占CPU资源的情况
2)使用renice调整运行中的nice值
[[email protected] test]# renice 19 10615
[[email protected] 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
Linux运维系统工程师系列---14,布布扣,bubuko.com