应用程序:
系统硬件:
固件:(芯片+程序)(例如BIOS)(BIOS最先启动)
硬件:
Linux进程管理:
程序:一组指令集合以及参数集合,按照相应的逻辑控制计算机完成特性任务
进程:运行的程序。是操作系统上的基本单位。有生命周期,有状态。
线程:一个进程可以有多个线程,但是一个线程只能被一个进程所拥有。线程不能独立运行
程序:封闭性、静态性
进程:动态性、并发行、交互性、虚拟性
-
操作系统以进程为单位分配系统资源
-
每一个进程运行是独立的
-
具有独立的地址空间,运行状态
-
多个程序同时运行,每一个程序就是一个进程
-
Linux系统中每个进程或者线程都有独立的资源集(整套cpu,整套内存,整套i/o),每个进程进入内存前都会先虚拟出一个和真实内存一样的虚拟内存,然后通过映射机制,映射到真实内存中。
-
cpu是按照时间片来运行程序的
-
一个进程的所有线程都运行完,这个进程才会运行完。
1、父进程和子进程:
- 子进程由父进程(调用fork函数)派生,子进程可以在派生子进程
- 父进程派生了一个子进程后处于休眠状态
- 子进程拥有父进程的资源,权限
- 子进程运行自己的程序(调用exec方法/函数)
- 退出时唤醒父进程,父进程也不一定一醒来就变成运行状态,说不定要等待cpu资源
2、进程的生命周期:
- CentOS6以“init”为第一个父进程
- CentOS6以“systemd”为第一个父进程
等待状态;就绪状态;运行状态;阻塞状态;休眠状态;死亡状态。
3、进程的管理工具:
pstree:
进程树查看进程之间的关系
- -p:可以显示PID
-
-u:显示用户
-
-A:各进程树之间以ASCⅡ码连接
-
-U:各进程树之间以UTF-8字符连接
ps:
- -l:较详细的列出PID的进程信息
- F:代表这个程序的旗标(flag),4代表superuser
- ADDR:内核参数,支出该程序在内存的哪个部分,如果是个执行的程序,一般就是 -
- SZ:使用掉的内存大下
- WCHAN:程序当前的状态
- TTY:登陆者的终端机位置
- TIME:使用掉CPU的时间
- CMD:所下达的指令名称
- -a:在这个终端下有多少进程
- -x:通常与a一起使用,可以列出比较完整的进程信息
- -u:以用户为主的进程状态
- VSZ:该进程使用掉的虚拟内存量
- RSS:该进程占用的固定的内存量
- -A:显示所有进程,相同与-e
- -e:显示所有进程,相同于-A
- -f:列出更为完整的信息
pgrep:
筛选进程(通过匹配程序名,来匹配进程)
- -l:同时显示PID和进程名
- -o:匹配出来多个进程时,显示出最小的进程号
- -n:匹配出来多个进程时,显示出最大的进程号
kill:
(不能带进程名字)
-
不带参数默认是15
-
-0:只查看进程
-
-9:强制杀死进程
-
-w:等待进程死亡
-
-l:列出已知信号
- 1:终端断线
- 2:中断(同CTRL+C)
- 3:退出(同CTRL+\)
- 15:(终止)
- 9:(强制终止)—>(只有9信号才可以无条件终止进程,其他的信号进程都有权忽略)
- 18:继续(fg/bg命令)
- 19:暂停(同CTRL+Z)
killall(可以带名字):杀死所有同名进程
htop:
实时监测,比top更强大,可以理解为top的升级版
要用epel源下载
vmstat:
监测工具(相比top,可以看到整个机器的cpu,i/o,内存的使用情况)
-
一般vmstat要用两个数字参数来完成,第一个是采样的时间间隔(s),第二个是采样次数。
-
如果swap分区启用了,说明内存条不够用了,不能直接加内存条,查看进程,把不用的、占用内存大的进程杀掉。
-
-v:显示vmstat版本信息
-
-d:显示各个磁盘相关统计信息
-
-D:显示磁盘总体信息
-
-p:显示指定磁盘分区统计信息
-
-t:将时间一块打印出来
-
vmstat各个项对应的意思
- r:等待执行的任务数(当这个值超过了cpu个数,就会出现cpu瓶颈)
- b:等待i/o的进程数
- swpd:正在使用虚拟的内存大小(值大于0就表示物理内存不够用了)
- free:空闲内存大小(物理内存)
- si:每秒从交换区写入内存的大小
- so:每秒从内存写到交换区的大小
- bi:每秒读取的块数(读磁盘)
- bo:每秒写入的块数(写磁盘)
- in:每秒中断数(值越大,由内核消耗的cpu时间会越多)
- cs:每秒上下文切换次数(同上)
- us:用户进程执行消耗cpu的时间
- sy:系统进程消耗cpu的时间
- id:空闲时间(包括io等待时间)
- wa:(等待io时间)
lsof:
- FD:文件标识符
[root@node1 ~ 32]#lsof /etc/sysconfig/network-scripts/ifcfg-eth0--显示开启该文件的进程
[root@node1 ~ 33]#lsof -p 1432--列出进程号为1432的进程所打开的文件
[root@node1 ~ 37]#lsof -g 500--列出归属组ID为500的进程(也可以为组名)
[root@node1 ~ 39]#lsof -u lxw--列出归属用户lxw的进程(也可以为UID)
[root@node1 ~ 41]#lsof +d /etc--显示目录下被进程打开的文件
[root@node1 ~ 42]#lsof +D /etc--同上,但会搜索目录下的目录,时间较长
[root@node1 ~ 43]#lsof -d cwd--显示使用FD为cwd的进程
[root@node1 ~ 45]#lsof -i :55--显示符合条件的进程
4、程序优先级(0-139):
越小越大
-
0-99:有效实时优先级(无法调整,操作系统自己调整)
-
100-139:非有效实时优先级——>静态优先级(可以调整,通过调整nice值)
-
PR:静态优先级-100(rt是0-99之间的进程)PR-20=NI
-
PRI:PRI+40=0-139
5、调整nice值(-20-19):
值越小,优先级越高
-
在top命令中,按r进行调整优先级
-
renice 调整后的nice值 PPID
-
htop:选中相应的进程,F7减小nice值(增大优先级),F8加大nice值(减小优先级)
6、进程在前后台运行:
-
在前台一次只能运行一个作业
-
在后台可以运行多个作业
-
把作业放到后台去,用**&**
-
jobs:查看后台作业
-
作业要在对应终端上查看,不能跨终端查看。
-
fg %编号——把后台作业提到前端来(ctrl+z放到后台,并暂停;ctrl+c直接终止作业)
-
bg %编号——把后台作业运行起来
-
ctrl+z:把作业挂起
-
kill %编号:先停止,在杀死作业
注意把输出结果放在垃圾桶,要不然作业将在后台执行,但是输出结果在前台显示,但是不影响前台作业执行。
后台任务无法通过ctrl+c/CTRL+z进行控制,必须调到前台,在对其进行控制
7、一次查找多个进程
8、/proc
是一个伪文件系统,只存在内存之中,而不占用外存空间,/prco下的文件基本都是只读的
/proc/cpuinfo:cpu信息
/proc/meninfo:内存信息
/proc/devices:已经加载的设备
/proc/filesystems:当前内核支持的文件系统
/proc/modules:所有加载到内核的模块列表
/proc/partitions:分区中的块分配信息
/proc/uptime:系统已经运行了多久
proc/swaps:交换空间的使用情况
/proc/version:Linux内核版本和gcc版本
/proc/driver:驱动信息
/proc/fs:文件系统的信息
/proc/net:网卡设备信息
/pro/vmstat:虚拟内存统计信息
/proc/diskstats:磁盘信息
/proc/#:进程信息
9、/sys
/sys/devices:全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备
/sys/dev:该目录下有字符设备(block)和块设备(char)两个字目录
/sys/module:所有被载入kernel的模块(.ko文件)
/sys/fs:描述系统中所有的文件系统
/sys/kernel:存放内核中所有可调整的参数
s:所有加载到内核的模块列表
/proc/partitions:分区中的块分配信息
/proc/uptime:系统已经运行了多久
proc/swaps:交换空间的使用情况
/proc/version:Linux内核版本和gcc版本
/proc/driver:驱动信息
/proc/fs:文件系统的信息
/proc/net:网卡设备信息
/pro/vmstat:虚拟内存统计信息
/proc/diskstats:磁盘信息
/proc/#:进程信息
9、/sys
/sys/devices:全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备
/sys/dev:该目录下有字符设备(block)和块设备(char)两个字目录
/sys/module:所有被载入kernel的模块(.ko文件)
/sys/fs:描述系统中所有的文件系统
/sys/kernel:存放内核中所有可调整的参数
/sys/power:控制整个机器的电源状态