看!!灰机

博客园 首页 联系 订阅 管理

进程:

内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安 全功能等  Process: 运行中的程序的一个副本,是被载入内存的一个指令集合  进程ID(Process ID,PID)号码被用来标记各个进程UID、GID、和SELinux(据说加上这个软件,系统很安全,国内没有,通常都是禁用)语境决定对文件系统的存取和访问权限,  通常从执行进程的用户来继承  存在生命周期

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

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

  进程创建:  init:第一个进程     父子关系  进程:都由其父进程创建,CoW(这种机制)  fork(), clone()

 

创建状态:进程在创建时需要申请一个空白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(1)

  O(logn)  超过恒定值,规模越大需要的时间慢慢越大

  O(n)线性  随着规模越大,所需要的时间越大

  O(n^2)抛物线  规模越大浪费的时间越大,比线性用的时间更多

  O(2^n) 需要的时间最多

  每个进程都有一个运行队列和一个过期队列

 

  system  (系统)优先级

  realtme (实时)优先级

  nice 优先级

  YOP 是个命令,但是在top里面也有优先级

 

 

   进程内存: 

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

   LRU:Least Recently Used 近期最少使用算法,释放内存  物理地址空间和线性地址空间

 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

 

   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

 

  Linux内核:抢占式多任务

  进程类型:  守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程  前台进程:跟终端相关,通过终端启动的进程 

  注意:两者可相互转化

  进程状态:  运行态:running 

  就绪态:ready 

  睡眠态:   可中断:interruptable  

  不可中断:uninterruptable  停止态:stopped,暂停于内存,但不会被调度,除非手动启动  僵死态:zombie,结束进程,父进程结束前,子进程不关闭

 

  进程的分类:

   CPU-Bound:CPU密集型,非交互

    IO-Bound:IO密集型,交互

    Linux系统状态的查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup

    pstree命令:  pstree - display a tree of processes

    ps: process state  ps - report a snapshot of the current processes  Linux系统各进程的相关信息均保存在/proc/PID目录下 的各文件中

 

线程是共享磁盘空间的。

 

  ps [OPTION]...

   支持三种选项:

   UNIX选项  如-A -e

   BSD选项 如a

   GNU选项 如--help

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

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

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

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

    f 选项显示进程树,相当于 --forest(森林,树林的意思)

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

    o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem

    L 显示支持的属性列表

 

 ps aux  常用

 

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

  -L 显示线程

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

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

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

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

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

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

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

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

  -p pid 显示指pid的进程

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

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

 

  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: 实时优先级

  示例:  ps axo pid,cmd,psr,ni,pri,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

  uid   有效用户

  ruid  真正的用户

 

 

  查询你拥有的所有进程: 显示你当前用户的

   ps -x               -x 带-和不带-都一样

   显示指定用户名(RUID)或用户ID的进程:

    ps -fU apache   

     ps -fu 48        

     显示指定用户名(EUID)或用户ID的进程:

      ps -fu wang     显示有效进程

        ps -fU wang      显示所有进程

      ps -fu 1000 查看以root用户权限(实际和有效ID)运行的每个进程:

       ps -U root -u root 列出某个组拥有的所有进程(实际组ID:RGID或名称):

       ps -fG nginx

 

  进程优先级调整: 

  静态优先级: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: 与指定终端相关的进程       t后面表示跟终端,可以-at 但是不能-ta  

    -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: 显示进程树

 

  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信息  

   示例:iostat 1 10     查看设备使用信息,很实用。尤其是CPU

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

   pmap [options] pid [...] 

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

   示例:pmap 1

   另外一种实现:

    cat /proc/PID/maps

 

C/S模式下运行glances命令

服务器模式:  glances -s -B IPADDR  IPADDR: 指明监听的本机哪个地址

客户端模式:  glances -c IPADDR  IPADDR:要连入的服务器端地址

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

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

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

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

-m: 禁用mount模块

 -n: 禁用网络模块

-t #: 延迟时间间隔

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

 

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相关的统计数据

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

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

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

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

 

  iotop   查看io进程   查看网卡    iostat 也可以

  -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单位,而不是对人友好的单位。在非 交互模式下,脚本编程有用

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

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

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

  -qq 永远不显示列名

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

 交互按键 left和right方向键:改变排序

 r:反向排序

o:切换至选项--only

p:切换至--processes选项

 a:切换至--accumulated选项

 q:退出。

 i:改变线程的优先级

 

 

  进程管理 工具:

 

按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: 显示指定进程的子进程

 

  pstree   查看所有进程

 

 

 

并行执行任务:

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

方法1   

vi all.sh

f1.sh&

 f2.sh&

 f3.sh&

方法2   

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

方法3  

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

 

任务计划:        (所有的计划任务都是在后台运行,前台无显示,可在邮件中显示)(只要不是交互式标准输出或者不必要的文件就直接dev/null 扔进垃圾箱)

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

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

batch:系统自行选择空闲时间去执行此处指定的任务

• 周期性运行某任务 cron(重点掌握这个词) 默认开机启动

 

at任务

 包:at

 

在某个时间创建计划任务

 

通过脚本创建计划任务

 at命令:at  [option] TIME   创建计划任务

 

 

屏幕剪辑的捕获时间: 2017/12/18 9:37

广播一下10点钟到了

 

 

想加入什么命令直接添加然后回车

 常用选项: 

-V 显示版本信息:

  -l: 列出指定队列中等待运行的作业;相当于atq     查看未执行的计划任务

 

 

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

                     At -d 加上计划编号   或者    atrm 加上计划编号

 -c: 查看具体作业任务 

                 At -c 加上计划编号 就可以查看这个计划任务

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

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

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

 TIME:定义出什么时候进行

at 这项任务的时间 

HH:MM [YYYY-mm-dd] 

 

noon, midnight, teatime(4pm)

 

如果执行的任务时间过了,他会自动订到明天

 

 tomorrow 

now+#{minutes,hours,days, OR weeks}   推后时间

 

                            20分钟后执行命令

 

命令加入计划任务

 

 

多个命令创建计划任务  以 \n 换行符为结束

 

at时间格式

HH:MM  02:00

 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务

HH:MM YYYY-MM-DD   02:00 2016-09-20 

 规定在某年某月的某一天的特殊时刻进行该项任务

HH:MM[am|pm] [Month] [Date]  

 04pm March 17   

17:20 tomorrow

HH:MM[am|pm] + number [minutes|hours|days|weeks]  

 在某个时间点再加几个时间后才进行该项任务   

now + 5 minutes  

 02pm + 3 days

 

 

执行方式: (普通用户可以执行计划任务)计划任务以分钟为单位

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用户不让普通用户执行计划任务

 

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

如果这个普通用户同时在黑名单和白名单里面优先级高,白名单优先生效。但是一旦启用白名单,那不在白名单的所有用户都被拒绝执行任务计划权限

 

如果没有这两个文件,除了root,都没有权限。

 

有特殊权限。

 

如果不想执行计划任务,直接删除这个计划任务

 

计划任务服务

 

周期性任务计划:cron

相关的程序包: 

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

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

 

 

确保crond守护处于运行状态:

 CentOS 7: 

在7版本上。这个命令加上 服务名(atd)可查看

 

查看这个命令是否启用

 systemctl status crond

  CentOS 6:   

 

在6版本上用这个命令

查看这个任务服务是否启用

service crond status

计划周期性执行的任务提交给crond,到指定时间会自动运行

 系统cron任务:系统维护作业 

 /etc/crontab

 用户cron任务:

  crontab命令

 

Run-parts  执行这个下的所有脚本。

 

屏幕剪辑的捕获时间: 2017/12/18 10:50

日志:/var/log/cron

 

屏幕剪辑的捕获时间: 2017/12/18 10:52

 

系统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!"

 

判断周六周日

 

 

 系统的计划任务:

 /etc/crontab /etc/cron.d/  配置文件

 /etc/cron.hourly/  脚本

/etc/cron.daily/ 脚本

/etc/cron.weekly/ 脚本

/etc/cron.monthly/ 脚本

 

运行计算机关机时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 文件 的时间戳

 

 

CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件

CentOS7使用systemd-tmpfiles-setup服务实现

配置文件:

 /etc/tmpfiles.d/*.conf

 /run/tmpfiles.d/*.conf

  /usr/lib/tmpfiles/*.conf

 /usr/lib/tmpfiles.d/tmp.conf

 d /tmp 1777 root root 10d

 

 d /var/tmp 1777 root root 30d

命令:

 systemd-tmpfiles –clean|remove|create  configfile

 管

 

用户cron:

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}

 

注意:运行结果的标准输出和错误以邮件通知给相关用户

 (1) COMMAND > /dev/null 

 (2) COMMAND &> /dev/null

对于cron任务来讲,%有特殊用途;如果在命令中要使用%, 则需要转义,将%放置于单引号中,则可不用转义

posted on 2017-12-18 20:46  看!!灰机  阅读(415)  评论(0编辑  收藏  举报