1.内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
2.task struct:Linux内核存储进程信息的数据结构格式
3.task list:多个任务的的task struct组成的链表
4.创建进程:
init(systemd):祖先进程
CoW:(Copy On Write)写时复制,父进程创建子进程
5.内存空间:Page Frame: 页框,用存储页面数据,存储Page 4k
6.物理地址空间和线性地址空间
(1)MMU:(Memory Management Unit) 负责转换线性和物理地址
(2)TLB:(Translation Lookaside Buffer)CPU内的缓存:用于保存虚拟地址和物理地址映射关系的缓存;翻译后备缓冲器。
(3)LRU:(Least Recently Used)用于 释放内存;近期最少使用算法。
数据段:存放初始化过的变量(赋值的变量)如declare -i n=2
BSS:(以符合开始的块)存放没有初始化的变量(没有赋值)如declare -i n
堆:内存动态变化空间
栈:存放函数变量
运行态:running
就绪态:ready
睡眠态: 进程主要所处状态
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
(一)运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态
(二)就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
(三)运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求
(四)阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列
(五)以下两种状态是不可能发生的:
(六)阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取
(七)就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态
假设序列为 4 3 4 2 3 1 4 2
物理块有3个,则
第1轮 4调入内存 4
第2轮 3调入内存 3 4
第3轮 4调入内存 4 3
第4轮 2调入内存 2 4 3
第5轮 3调入内存 3 2 4
第6轮 1调入内存 1 3 2
第7轮 4调入内存 4 1 3
第8轮 2调入内存 2 4 1
pipe 管道:一个进程往里写数据,另一个进程从里面读数据
socket 套接字文件:一个进程写文件,另一个进程读此文件
signal 信号:如Ctrl C
给进程发信号
shm (shared memory)共享内存
semaphore 信号量:一种计数器:使用资源,计数器-1;释放资源,计数器+1
socket:需要两网络主机IP和端口号
RPC remote procedure call:如下图
MQ 消息队列,如:Kafka,RabbitMQ,ActiveMQ:
系统优先级:数字越小,优先级越高
0-139:各有140个运行队列和过期队列
实时优先级: 99-0 值最大优先级最高
nice值:-20到19,对应系统优先级100-139
优先级范围 | 描述 |
---|---|
0-99 | 实时进程 |
100-139 | 非实时进程 |
1.pstree
格式:pstree
以树状图显示进程,只显示进程的名字,且相同进程合并显示。
格式:pstree -p
以树状图显示进程,还显示进程PID。
格式:pstree
格式:pstree -p
以树状图显示进程PID为的进程以及子孙进程,如果有-p参数则同时显示每个进程的PID
2 .ps
2.1可查看信息
查询你拥有的所有进程
显示指定用户名(RUID)或用户ID的进程
列出某个组拥有的所有进程
显示指定的进程ID对应的进程名
以父进程ID来显示其下所有的进程
以进程树显示系统中的进程如何相互链接ps -e --forest
以进程树显示指定的进程ps -ef --forest | grep -v grep | grep sshd
要显示一个进程的所有线程,将显示LWP(轻量级进程)以及NLWP(轻量级进
程数)列 ps -fL -C nginx
要列出所有格式说明符ps L
查看进程的PID,PPID,用户名和命令 ps -eo pid,ppid,user,cmd
renice [-n] priority pid…
软连接可做到连接名不同,功能不同
[root@CentOS7 ~]#ll /usr/sbin/pidof
lrwxrwxrwx. 1 root root 18 May 1114:09 /usr/sbin/pidof -> /usr/sbin/killall5
2.2 结束脚本的进程
例如有个查看网络主机在线状态的脚本执行,此时想结束进程
首先:查看进程树进程ID:pstree -p
其次:结束ping命令进程的父进程PID:kill -9 PIDping (一个ping就是一个子进程,此子进程随着IP地址变化而变化)
3.top
4.htop:
epel源:yum install htop
5.进程与CPU绑定
ps axo pid,cmd,psr
taskset -p 10021
#查看CPU信息
lscpu
dd目前在1号CPU上运行
CPU内核数4颗:0-3号
mask:f表示可以在4颗中任意1颗,1(3)1(2)1(1)1(0)
进程dd绑定CPU3
taskset -cp 3 10021 #绑定ID=10021进程到第3个cpu
ps axo pid,cmd,psr
taskset -p 10021
[root@CentOS7 ~]#free -h
total used free shared buff/cache available
Mem: 1.9G 393M 1.0G 17M 547M 1.3G
Swap: 4.0G 0B 4.0G
[root@CentOS7 ~]#find /proc -name "drop*"
/proc/sys/fs/quota/drops
/proc/sys/vm/drop_caches
[root@CentOS7 ~]#cat /proc/sys/vm/drop_caches
0
[root@CentOS7 ~]#echo 3 > !$
echo 3 > /proc/sys/vm/drop_caches
[root@CentOS7 ~]#iostat 4 #每隔4秒刷新一次
Linux 3.10.0-957.el7.x86_64 (CentOS7.6.localdomain) 06/13/2019 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
7.04 0.04 12.33 0.62 0.00 79.97
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.01 0.40 0.00 1050 0
sda 7.22 372.75 29.42 988617 78016
ls /proc/`pidof dd`
cat /proc/`pidof dd`/maps
[root@CentOS7 ~]#pmap `pidof dd`
12789: dd if=/dev/zero of=/dev/null
0000000000400000 68K r-x-- dd
0000000000610000 4K r---- dd
0000000000611000 4K rw--- dd
00000000021fc000 132K rw--- [ anon ]
00007faac4d3a000 103592K r---- locale-archive
00007faacb264000 1800K r-x-- libc-2.17.so
00007faacb426000 2048K ----- libc-2.17.so
00007faacb626000 16K r---- libc-2.17.so
00007faacb62a000 8K rw--- libc-2.17.so
00007faacb62c000 20K rw--- [ anon ]
00007faacb631000 136K r-x-- ld-2.17.so
00007faacb83a000 12K rw--- [ anon ]
00007faacb851000 4K rw--- [ anon ]
00007faacb852000 4K r---- ld-2.17.so
00007faacb853000 4K rw--- ld-2.17.so
00007faacb854000 4K rw--- [ anon ]
00007ffeb0e1e000 132K rw--- ==[ stack ]== 堆
00007ffeb0fc2000 8K r-x-- [ anon ]
ffffffffff600000 4K r-x-- [ anon ]
total 108000K
[root@CentOS7 ~]#strace /bin/cat 查看系统调用
[root@CentOS7 cd]#yum install ltrace
[root@CentOS7 cd]#ltrace /bin/cat 查看调用函数库
epel源:[root@CentOS6 ~]#yum install iftop
[root@CentOS6 ~]#iftop -ni eth0 #指定只看某块网卡
nload是一个实时监控网络流量和带宽使用情况,以数值和动态图展示进出的流量情况
epel源:[root@CentOS7 cd]#yum install nload
[root@CentOS7 cd]#glances -s 开启服务端
glances -s -B IPADDR IPADDR: 指明监听的本机哪个地址
epel源[root@CentOS7 cd]#yum install dstat
dstat命令:系统资源统计,代替vmstat,iostat
epel源:[root@CentOS7 cd]#yum install iotop
查看当前系统文件的工具。在linux环境下,一切皆文件,用户通过文件不仅可以访问常规数据,还可以访问网络连接和硬件如传输控制协议 (TCP) 和用户数据报协议 (UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符
进程管理
lsof /dev/pts/1
lsof -p 9527
文件管理
查看指定程序打开的文件:lsof -c httpd
查看指定用户打开的文件:lsof -u root | more
查看指定目录下被打开的文件
lsof +D /var/log/
lsof +d /var/log/
参数+D为递归列出目录下被打开的文件,参数+d为列出目录下被打开的文件
查看所有网络连接
lsof -i –n
lsof [email protected]
通过参数-i查看网络连接的情况,包括连接的ip、端口等以及一些服务的连接情况,例如:sshd等。也可以通过指定ip查看该ip的网络连接情况
查看端口连接情况:lsof -i :80 -n
参数-i:端口可以查看端口的占用情况,还有查看协议,ip的连接情况等
查看指定进程打开的网络连接
lsof -i –n -a -p 9527
参数-i、-a、-p等,-i查看网络连接情况,-a查看存在的进程,-p指定进程
查看指定状态的网络连接
lsof -n -P -i TCP -s TCP:ESTABLISHED
-n:no host names, -P:no port names,-i TCP指定协议,-s指定协议状态通过多个参数可以清晰的查看网络连接情况、协议连接情况等
文件恢复
正在被使用的文件,Linux里可以被删除,此时可以在lsof帮助下恢复文件
例子:
/dev/pts/1:
[root@CentOS7 ~]#cp /etc/fstab /data/
[root@CentOS7 ~]#less fstab #一个终端执行查看文件
/dev/pts/0
[root@CentOS7 ~]#rm -f /data/fstab #另一个终端删除打开的文件
[root@CentOS7 ~]#ls /data/fstab #查看不到文件
[root@CentOS7 ~]#lsof |grep delete #查看删除状态的文件,找到被删除文件ID
[root@CentOS7 ~]#ll /proc/22807/fd
[root@CentOS7 ~]#cat /proc/22807/fd/4 > /data/fs #恢复到指定目录
[root@CentOS7 ~]#cat /data/fs
前台作业:通过终端启动,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
同时运行多个进程,提高效率
方法1
vim all.sh
f1.sh&
f2.sh&
f3.sh&
方法2
(f1.sh&);(f2.sh&);(f3.sh&)
方法3
{ f1.sh& f2.sh& f3.sh& }