• LinuxDay14——进程管理


    程相关概念

    内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等

    Process: 运行中的程序的一个副本,是被载入内存的一个指令集合

      进程ID(Process ID,PID)号码被用来标记各个进程

      UID、GID、和SELinux语境决定对文件系统的存取和访问权限,

      通常从执行进程的用户来继承

      存在生命周期

    task struct:Linux内核存储进程信息的数据结构格式

    task list:多个任务的的task struct组成的链表

    进程创建

      init:第一个进程

      父子关系

      进程:都由其父进程创建,CoW

      fork(), clone()

    进程内存

      Page Frame: 页框,用存储页面数据,存储Page 4k

      LRU:Least Recently Used 近期最少使用算法,释放内存

      物理地址空间和线性地址空间

      MMU:Memory Management Unit负责转换线性和物理地址

      TLB:Translation Lookaside Buffer 翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存

    IPC: Inter Process Communication

     同一主机: signal:信号

      shm: shared memory

      semaphore:信号量,一种计数器

     不同主机:socket: IP和端口号

      RPC: remote procedure call

      MQ:消息队列,Kafka,ActiveMQ

    进程的基本状态

    创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

    就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行

    执行状态:进程处于就绪状态被调度后,进程进入执行状态

    阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用

    终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

    状态之间转换六种情况

    运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态。

    就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU

    运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求

    阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列

    以下两种状态是不可能发生的:

    阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取

    就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态

    进程优先级

     系统优先级:数字越小,优先级越高

      0-139(CentOS4,5)

        各有140个运行队列和过期队列

      0-98,99(CentOS6)

     实时优先级: 99-0 值最大优先级最高

     nice值:-20到19,对应系统优先级100-139或99

    Big O:时间复杂度,用时和规模的关系

     O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)

    LRU算法

     

    进程状态

    Linux内核:抢占式多任务

    进程类型:

      守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程

      前台进程:跟终端相关,通过终端启动的进程

      注意:两者可相互转化

    进程状态:

      运行态:running

      就绪态:ready

      睡眠态:

       可中断:interruptable

       不可中断:uninterruptable

      停止态:stopped,暂停于内存,但不会被调度,除非手动启动

      僵死态:zombie,结束进程,父进程结束前,子进程不关闭

    系统管理工具

    PS命令:选项:默认显示当前终端中的进程

    支持三种选项:

     GNU选项 如--help

     BSD选项 如a

      a 选项包括所有终端中的进程

      x 选项包括不链接终端的进程

      u 选项显示进程所有者的信息

      f 选项显示进程树,相当于 --forest

      k|--sort 属性 对属性排序,属性前加- 表示倒序

      o 属性… 选项显示定制的(需要配合使用) 默认当前终端进程

      L 显示支持的属性列表

     UNIX选项 如-A -e

      -C cmdlist 指定命令,多个命令用,分隔

      -L 显示线程

      -e: 显示所有进程,相当于-A

      -f: 显示完整格式程序信息

      -F: 显示更完整格式的进程信息

      -H: 以进程层级格式显示进程相关信息

      -u userlist 指定有效的用户ID或名称 euser

      -U userlist 指定真正的用户ID或名称 ruser

      -g gid或groupname 指定有效的gid或组名称

      -G gid或groupname 指定真正的gid或组名称

      -p pid 显示指pid的进程

      --ppid pid 显示属于pid的子进程

      -M 显示SELinux信息,相当于Z

    ps输出属性

    VSZ: Virtual memory SiZe,虚拟内存集,线性内存

    RSS: ReSident Size, 常驻内存集

    STAT:进程状态

      R:running

      S: interruptable sleeping

      D: uninterruptable sleeping

      T: stopped

      Z: zombie

      +: 前台进程

      l: 多线程进程

      L:内存分页并带锁

      N:低优先级进程

      <: 高优先级进程

      s: session leader,会话(子进程)发起者

      ni: nice值

      pri: priority 优先级

      psr: processor CPU编号

      rtprio: 实时优先级

    常用组合

      aux

      -ef

      -eFH

      -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm

      axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

    进程优先级

    进程优先级调整:

      静态优先级:100-139

      进程默认启动时的nice值为0,优先级为120

      只有根用户才能降低nice值(提高优先性)

    nice命令:

      nice [OPTION] [COMMAND [ARG]...]

    renice命令:

      renice [-n] priority pid...

    查看:

      ps axo pid,comm,ni

    搜索进程

    最灵活:ps 选项 | 其它命令

    按预定义的模式:pgrep

      pgrep [options] pattern

      -u uid: effective user,生效者

      -U uid: real user,真正发起运行命令者

      -t terminal: 与指定终端相关的进程

      -l: 显示进程名

      -a: 显示完整格式的进程名

      -P pid: 显示指定进程的子进程

    按确切的程序名称:/sbin/pidof

    查看进程编号

    pidof bash

    系统工具

    uptime

    显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)

    系统平均负载:

    指在特定时间间隔内运行队列中的平均进程数

    通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题

    如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用

    top

    排序

      P:以占据的CPU百分比,%CPU

      M:占据内存百分比,%MEM

      T:累积占据CPU时长,TIME+

    首部信息显示

      uptime信息:l命令

      tasks及cpu信息:t命令

      cpu分别显示:1 (数字)

      memory信息:m命令

    退出命令:q

    修改刷新时间间隔:s

    终止指定进程:k

    保存文件:W

    栏位信息简介

      us:用户空间

      sy:内核空间

      ni:调整nice时间

      id:空闲

      wa:等待IO时间

      hi:硬中断

      si:软中断(模式切换)

      st:虚拟机偷走的时间

    选项:

      -d #: 指定刷新时间间隔,默认为3秒

      -b: 全部显示所有进程

      -n #: 刷新多少次后退出

    htop命令:EPEL源

    选项:

      -d #: 指定延迟时间;

      -u UserName: 仅显示指定用户的进程

      -s COLUME: 以指定字段进行排序

    子命令:

      s: 跟踪选定进程的系统调用

      l: 显示选定进程打开的文件列表

      a:将选定的进程绑定至某指定CPU核心

      t: 显示进程树

    内存空间

    内存空间使用状态:

    free [OPTION]

      -b 以字节为单位

      -m 以MB为单位

      -g 以GB为单位

      -h 易读格式

      -o 不显示-/+buffers/cache行

      -t 显示RAM + swap的总和

      -s n 刷新间隔为n秒

      -c n 刷新n次后即退出

    vmstat命令:虚拟内存信息

    vmstat [options] [delay [count]]

    vmstat 2 5

    procs:

    r:可运行(正运行或等待运行)进程的个数,和核心数有关

    b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)

    memory

    swpd: 交换内存的使用总量

    free:空闲物理内存总量

    buffer:用于buffer的内存总量

    cache:用于cache的内存总量

    swap:

      si:从磁盘交换进内存的数据速率(kb/s)

      so:从内存交换至磁盘的数据速率(kb/s)

    io

      bi:从块设备读入数据到系统的速率(kb/s)

      bo: 保存数据至块设备的速率

    system

    in: interrupts 中断速率,包括时钟

    cs: context switch 进程切换速率

    cpu

      us:Time spent running non-kernel code

      sy: Time spent running kernel code

      id: Time spent idle. Linux 2.5.41前,包括IO-wait time.

      wa: Time spent waiting for IO. 2.5.41前,包括in idle.

      st: Time stolen from a virtual machine. 2.6.11前, unknown.

     选项:

      -s: 显示内存的统计数据

    iostat:统计CPU和设备IO信息

    pmap命令:进程对应的内存映射

      pmap [options] pid [...]

      -x: 显示详细格式的信息

      另外一种实现:

      cat /proc/PID/maps

    glances命令:EPEL源

      glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]

     内建命令:

      a Sort processes automatically l Show/hide logs

      c Sort processes by CPU% b Bytes or bits for network I/O

      m Sort processes by MEM% w Delete warning logs

      p Sort processes by name x Delete warning and critical logs

      i Sort processes by I/O rate 1 Global CPU or per-CPU stats

      d Show/hide disk I/O stats h Show/hide this help screen

      f Show/hide file system stats t View network I/O as combination

      n Show/hide network stats u View cumulative network I/O

      s Show/hide sensors stats q Quit (Esc and Ctrl-C also work)

      y Show/hide hddtemp stats

     常用选项:

      -b: 以Byte为单位显示网卡数据速率

      -d: 关闭磁盘I/O模块

      -f /path/to/somefile: 设定输入文件位置

      -o {HTML|CSV}:输出格式

      -m: 禁用mount模块

      -n: 禁用网络模块

      -t #: 延迟时间间隔

      -1:每个CPU的相关数据单独显示

    C/S模式下运行glances命令

    服务器模式:

    glances -s -B IPADDR

    IPADDR: 指明监听的本机哪个地址

    客户端模式:

    glances -c IPADDR

    IPADDR:要连入的服务器端地址

    dstat命令:系统资源统计,代替vmstat,iostat

    dstat [-afv] [options..] [delay [count]]

      -c: 显示cpu相关信息

      -C #,#,...,total

      -d: 显示disk相关信息

      -D total,sda,sdb,...

      -g:显示page相关统计数据

      -m: 显示memory相关统计数据

      -n: 显示network相关统计数据

      -p: 显示process相关统计数据

      -r: 显示io请求相关的统计数据

      -s: 显示swapped相关的统计数据

      --tcp

      --udp

      --unix

      --raw

      --socket

      --ipc

      --top-cpu:显示最占用CPU的进程

      --top-io: 显示最占用io的进程

      --top-mem: 显示最占用内存的进程

      --top-latency: 显示延迟最大的进程

    iotop

    iotop命令是一个用来监视磁盘I/O使用状况的top类工具iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息,可查看每个进程是如何使用IO

    iotop输出

    第一行:Read和Write速率总计

    第二行:实际的Read和Write速率

    第三行:参数如下:

     线程ID(按p切换为进程ID)

     优先级

     用户

     磁盘读速率

     磁盘写速率

     swap交换百分比

     IO等待所占的百分比

     线程/进程命令

    iotop常用参数

      -o, --only只显示正在产生I/O的进程或线程,除了传参,可以在运行过程中按o生效

      -b, --batch非交互模式,一般用来记录日志

      -n NUM, --iter=NUM设置监测的次数,默认无限。在非交互模式下很有用

      -d SEC, --delay=SEC设置每次监测的间隔,默认1秒,接受非整形数据例如1.1

      -p PID, --pid=PID指定监测的进程/线程

      -u USER, --user=USER指定监测某个用户产生的I/O

      -P, --processes仅显示进程,默认iotop显示所有线程

      -a, --accumulated显示累积的I/O,而不是带宽

      -k, --kilobytes使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用

    iotop常用参数和快捷键

      -t, --time 加上时间戳,非交互非模式

      -q, --quiet 禁止头几行,非交互模式,有三种指定方式

       -q 只在第一次监测时显示列名

       -qq 永远不显示列名

       -qqq 永远不显示I/O汇总

    交互按键

      left和right方向键:改变排序

      r:反向排序

      o:切换至选项--only

      p:切换至--processes选项

      a:切换至--accumulated选项

      q:退出

      i:改变线程的优先级

    进程管理工具

    kill命令:

    向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头(可省略),不区分大小写

    显示当前系统可用信号: kill –l,trap -l

    常用信号:man 7 signal

      1) SIGHUP: 无须关闭进程而让其重读配置文件

      2) SIGINT: 中止正在运行的进程;相当于Ctrl+c

      3) SIGQUIT:相当于ctrl+

      9) SIGKILL: 强制杀死正在运行的进程

      15) SIGTERM:终止正在运行的进程

      18) SIGCONT:继续运行

      19) SIGSTOP:后台休眠

    指定信号的方法

    (1) 信号的数字标识:1, 2, 9

    (2) 信号完整名称:SIGHUP (3) 信号的简写名称:HUP

      按PID:kill [-SIGNAL] pid …

      kill –n SIGNAL pid;kill –s SIGNAL pid

      按名称:killall [-SIGNAL] comm…

      按模式:pkill [options] pattern

      -SIGNAL

      -u uid: effective user,生效者

      -U uid: real user,真正发起运行命令者

      -t terminal: 与指定终端相关的进程

      -l: 显示进程名(pgrep可用)

      -a: 显示完整格式的进程名(pgrep可用)

      -P pid: 显示指定进程的子进程

      pidof搜索指令进程号

    作业管理

    Linux的作业控制

    前台作业:通过终端启动,且启动后一直占据终端;

    后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

    让作业运行于后台

    (1) 运行中的作业: Ctrl+z

    (2) 尚未启动的作业: COMMAND &

    后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系

    nohup COMMAND &>/dev/null &

    screen;COMMAND

    查看当前终端所有作业:jobs

    作业控制

    fg [[%]JOB_NUM]:把指定的后台作业调回前台

    bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行

    kill [%JOB_NUM]: 终止指定的作业

    把标准输出写入到nohub.out文件中

    nohup ping 172.1 &

    任务计划

    Linux任务计划、周期性任务执行

    未来的某时间点执行一次任务

    at

    包:at

    at命令:at [option] TIME

    常用选项:

    -V 显示版本信息:

    -l: 列出指定队列中等待运行的作业;相当于atq

    -d: 删除指定的作业;相当于atrm

    -c: 查看具体作业任务

    -f /path/from/somefile:从指定的文件中读取任务

    -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出

    注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

    TIME:定义出什么时候进行 at 这项任务的时间

    HH:MM [YYYY-mm-dd]

    noon, midnight, teatime(4pm)

    tomorrow

    now+#{minutes,hours,days, OR weeks}

    执行方式:

     1)交互式 2)输入重定向 3)at –f 文件

    依赖与atd服务,需要启动才能实现at任务

    at队列存放在/var/spool/at目录中

    /etc/at.{allow,deny}控制用户是否能执行at任务

    白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令

    黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行

      如果两个文件都不存在,只有 root 可以执行 at 命令

    周期性任务计划cron

    相关的程序包:

    cronie: 主程序包,提供crond守护进程及相关辅助工具

    cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务

    crontabs:包含CentOS提供系统维护任务

    计划任务

    系统cron任务:/etc/crontab

    注释行以 # 开头

    详情参见 man 5 crontab

    # Example of job definition:

    # .---------------- minute (0 - 59)

    # | .------------- hour (0 - 23)

    # | | .---------- day of month (1 - 31)

    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

    # | | | | |

    # * * * * * user-name command to be executed

    例如:晚上9点10分运行echo命令

    10 21 * * * centos /bin/echo "Howdy!"

    时间表示法:

    (1) 特定值

      给定时间点有效取值范围内的值

    (2) *

      给定时间点上有效取值范围内的所有值

    表示“每...”

    (3) 离散取值

      #,#,#

    (4) 连续取值

      #-#

    (5) 在指定时间范围上,定义步长

      /#: #即为步长

    @reboot Run once after reboot

    @yearly 0 0 1 1 *

    @annually 0 0 1 1 *

    @monthly 0 0 1 * *

    @weekly 0 0 * * 0

    @daily 0 0 * * *

    @hourly 0 * * * *

    anacron系统

    运行计算机关机时cron不运行的任务,CentOS6以后版本取消anacron服务,由crond服务管理

    对笔记本电脑、台式机、工作站、偶尔要关机的服务器及其它不一直开机的系统很重要对很有用

    配置文件:/etc/anacrontab,负责执行/etc/ cron.daily /etc/cron.weekly /etc/cron.monthly中系统任务。

        •字段1:如果在这些日子里没有运行这些任务……

        •字段2:在重新引导后等待这么多分钟后运行它

        •字段3:任务识别器,在日志文件中标识

        •字段4:要执行的任务

      由/etc/cron.hourly/0anacron执行

      当执行任务时,更新/var/spool/anacron/cron.daily 文件的时间戳

    命令:

    systemd-tmpfiles –clean|remove|create configfile

    crontab命令定义

    每个用户都有专用的cron任务文件: /var/spool/cron/USERNAME

    crontab命令:

    crontab [-u user] [-l | -r | -e] [-i]

    -l: 列出所有任务

    -e: 编辑任务

    -r: 移除所有任务

    -i:同-r一同使用,以交互式模式移除指定任务

    -u user: 仅root可运行,指定用户管理cron任务

    控制用户执行计划任务:

    /etc/cron.{allow,deny}

  • 相关阅读:
    javascript获取id元素
    小米供应链
    几个极限的证明
    第一章 实数
    当a在什么范围取值时,方程|x方-5x|=a有且只有两个相异实根
    壮壮的西城学探究里面的x=1,x=-1
    三角形的边长注意问题
    x方+x+1, x方-x+1无实根,不可能为0
    一个混合电路
    串联电路的电流处处相等
  • 原文地址:https://www.cnblogs.com/Gmiaomiao/p/8998710.html
Copyright © 2020-2023  润新知