进程管理详解

文章目录

  • 进程相关概念
    • 一、进程基本概念
    • 二、用户和内核空间
    • 三、进程状态及转换
          • (一)进程状态:
          • (二)进程间状态转换
    • 四、LRU算法
    • 五、进程间通信
          • 同一主机:
          • 不同主机:
    • 六、进程优先级
          • Centos优先级
  • 进程管理
    • 七、进程管理工具
          • (一)进程管理工具
          • (二)内存管理工具
            • 1.free
            • 2.IOstat::统计CPU和设备IO信息
            • 3.pmap
          • (三)网络流量管理工具
            • 1.IFTOP
            • 2.NLOAD
          • (四)系统监控:查看相关硬件指标性能
            • 1.GLANCES
            • 2.dstat:
            • 3.IOTOP:查看各进程的磁盘使用率
            • 4.lsof:list open files
      • 五、作业管理
            • (一) Linux的作业控制
            • (二)并行运行

进程相关概念

一、进程基本概念

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)用于 释放内存;近期最少使用算法。

二、用户和内核空间

进程管理详解_第1张图片
数据段:存放初始化过的变量(赋值的变量)如declare -i n=2
BSS:(以符合开始的块)存放没有初始化的变量(没有赋值)如declare -i n
堆:内存动态变化空间
栈:存放函数变量

三、进程状态及转换

(一)进程状态:

运行态:running
就绪态:ready
睡眠态: 进程主要所处状态
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭

(二)进程间状态转换

进程管理详解_第2张图片
(一)运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态
(二)就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
(三)运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求
(四)阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列
(五)以下两种状态是不可能发生的:
(六)阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取
(七)就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态

四、LRU算法

假设序列为 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
进程管理详解_第3张图片

五、进程间通信

同一主机:

pipe 管道:一个进程往里写数据,另一个进程从里面读数据
在这里插入图片描述
socket 套接字文件:一个进程写文件,另一个进程读此文件
在这里插入图片描述
signal 信号:如Ctrl C给进程发信号
shm (shared memory)共享内存
semaphore 信号量:一种计数器:使用资源,计数器-1;释放资源,计数器+1

不同主机:

socket:需要两网络主机IP和端口号
RPC remote procedure call:如下图
进程管理详解_第4张图片
MQ 消息队列,如:Kafka,RabbitMQ,ActiveMQ:
进程管理详解_第5张图片

六、进程优先级

系统优先级:数字越小,优先级越高
0-139:各有140个运行队列和过期队列
实时优先级: 99-0 值最大优先级最高
nice值:-20到19,对应系统优先级100-139

优先级范围 描述
0-99 实时进程
100-139 非实时进程

进程管理详解_第6张图片
进程优先级比较:
进程管理详解_第7张图片

Centos优先级

进程管理详解_第8张图片

进程管理

七、进程管理工具

(一)进程管理工具

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

  • 查找占用最多内存和CPU的进程
    进程管理详解_第9张图片
    2.1调整优先级:

    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
进程管理详解_第10张图片
4.htop:
epel源:yum install htop
进程管理详解_第11张图片
5.进程与CPU绑定

  ps axo pid,cmd,psr
  taskset -p 10021
  #查看CPU信息
  lscpu

dd目前在1号CPU上运行
进程管理详解_第12张图片
CPU内核数4颗:0-3号
进程管理详解_第13张图片
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

进程管理详解_第14张图片

(二)内存管理工具
1.free
[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

在这里插入图片描述

2.IOstat::统计CPU和设备IO信息
[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

进程管理详解_第15张图片
在这里插入图片描述

3.pmap
ls /proc/`pidof dd`
cat /proc/`pidof dd`/maps

进程管理详解_第16张图片
内存不断增长可能进程内存泄漏

[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

进程管理详解_第17张图片

[root@CentOS7 ~]#strace /bin/cat     查看系统调用
[root@CentOS7 cd]#yum install ltrace
[root@CentOS7 cd]#ltrace /bin/cat    查看调用函数库
(三)网络流量管理工具
1.IFTOP

epel源:[root@CentOS6 ~]#yum install iftop

[root@CentOS6 ~]#iftop -ni eth0       #指定只看某块网卡

在这里插入图片描述
进程管理详解_第18张图片

2.NLOAD

nload是一个实时监控网络流量和带宽使用情况,以数值和动态图展示进出的流量情况
epel源:[root@CentOS7 cd]#yum install nload

  • 上下方向键、左右方向键、enter键或者tab键都就可以切换查看多个网卡的流量情况
  • 按 F2 显示选项窗口
  • 按 q 或者 Ctrl+C 退出 nload
    进程管理详解_第19张图片
(四)系统监控:查看相关硬件指标性能
1.GLANCES
[root@CentOS7 cd]#glances -s                开启服务端

glances -s -B IPADDR IPADDR: 指明监听的本机哪个地址

在这里插入图片描述
进程管理详解_第20张图片
进程管理详解_第21张图片

2.dstat:

epel源[root@CentOS7 cd]#yum install dstat

dstat命令:系统资源统计,代替vmstat,iostat
进程管理详解_第22张图片

3.IOTOP:查看各进程的磁盘使用率

epel源:[root@CentOS7 cd]#yum install iotop

进程管理详解_第23张图片

4.lsof:list open files

查看当前系统文件的工具。在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    

在这里插入图片描述
进程管理详解_第24张图片

五、作业管理

(一) Linux的作业控制

前台作业:通过终端启动,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

  • 让作业运行于后台
    (1) 运行中的作业: Ctrl+z
    (2) 尚未启动的作业: COMMAND &
  • 后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系
    nohup COMMAND &>/dev/null &
    screen;COMMAND
  • 查看当前终端所有作业:jobs
  • 作业控制:
    fg [[%]JOB_NUM]:把指定的后台作业调回前台
    bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
    kill [%JOB_NUM]: 终止指定的作业
(二)并行运行

同时运行多个进程,提高效率

  • 方法1

    vim all.sh
    f1.sh&
    f2.sh&
    f3.sh&

  • 方法2

    (f1.sh&);(f2.sh&);(f3.sh&)

  • 方法3

    { f1.sh& f2.sh& f3.sh& }

你可能感兴趣的:(linux)