进程管理及计划任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程管理及计划任务相关的知识,希望对你有一定的参考价值。

进程的概念:

  • 内核的功用:进程管理,文件系统,网络功能,内存管理, 驱动程序,等
  • process:运行中的程序的一个副本,是被载入内存的一个指令集合
  • 进程ID(process ID,PID)号码被用来标记各个进程,UID, GID和SELinux语境决定对文件系统的存取和访问权限.通常从执行进程的用户来继承
  • 在Centos6以前第一个进程init
  • Centos7是systemd   为父子关系
  • 进程:都是由其父进程创建,使用cow机制,(写时复制)
  • 在没有写之前父子功用同一个空间,之后子进程单独指向其复制空间
  • 进程优先级
  •    系统优先级:数字越小优先级越高 (0-99)
  •    实时(realtime)优先级:值越大优先级越高(99-0)
  • nice优先级: 值越小优先级越高 (-20-19) 相当于系统99范围内
  • 进程相关概念
  • 进程内存: 
  •   page Frame:页框,yong存储页面数据,存储page 4k
  •   LRU:Least Recently Used 近期最少使用算法,释放内存
  • 进程状态
  •    Linux内核:抢占式多任务
  • 进程类型: 
  •        守护进程:daemon,相当于服务进程,在系统引导过程中启动的进程,和终端无关进程
  •    前台进程:跟终端相关,通过终端启动的进程 占用窗口
  •        前后台两者可以转换
  • 进程状态
  •   运行态:running
  •   就绪态:ready
  •   睡眠态:  可中断:intrruptable
  •               不可中断:uninterruptable
  •  停止态: stopped,暂停与内存,但不会被调用,除非手动启动
  •  僵死态:zombie:结束进程,父进程结束前,子进程不关闭(重启解决)

 进程管理工具

  • 进程分类:
  •    cpu密集型,非交互
  •    IO密集型,交互
  •   Linux系统状态的查看及管理工具: 
  •     pstree ,  ps , pidof, pgrep , top , htop, glance, pamap, vmstat, dstat,
  •     kill, pkill, job, bg, fg, nphup
  • Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
  •  pstree命令:
  •  列举进程ps
  •  适用于ps在查看进程信息

 

  • ps [OPRION]
  •   支持三种选项:
  •     UNIX选项 -A -e
  •     BSD选项  A e
  •     GNU选项 --help
  • 选项:
  •    a :查看所有终端的进程
  •    x:显示守护进程
  •    u:显示进程所属者信息
  •    f :显示进程的父进程
  •    k|--sort 属性 对属性排序
  •    o  属性...选项显示定制的信息
  •    echo $$显示当前进程
  •    echo $PPID显示父进程

 

进程管理工具

  •   VSZ:Virtual menmory size,虚拟内存集,线性内存
  •   RSS:ReSident Size, 常驻内存集
  •   STAT:进程状态
  •   R:running
  •   S:interruptable sleeping
  •   D:uninterruptable sleeping
  •   T: sropped
  •   Z:zombiie
  •   +:前台进程
  •   l:多线程进程
  •  L:内存分页并带锁
  •  N:低优先级进程
  •  <:高优先级进程
  •  s:session leader ,会话(子进程)发起者
  • 常用组合: -ef
  •    -e:显示所有进程
  •     -f:显示完整格式程序信息
  •     -eFH:
  •     -F:显示更完整格式的进程信息
  •     -H:以进程层次格式显示进程相关信息
  • 自定义:
  •      ps  axo pid,comm,euid,ruid,tty,psr...
  •      ps  axo pid,comm,euid,ruid,tty,rtprio,pri ..
  •     ni:nice值
  •     pri:priority 优先级
  •     psr:processor  CPU编号
  •     rtprio: 实时有优先级
  •     ps  axo pid,comm,ni,psr,tty,rtprio,pri ..
  • 搜索进程
  •   但与定义的模式:pgrep
  •     -u uid: 生效者
  •     -U:真正执行命令者
  •     -l :显示进程的名称
  •     -t: 查看指定终端运行的进程
  •     -P:显示指定进程的进程
  •     -a:显示完整格式的进程名称
  • 安确切的程序名称: /sbin/pidof
  •     pidof bash
  •     uptime:显示当前时间,系统已启动的时间,当前上线人数,系统平均负载(1,5, 10分钟的平均负载,一般不会超过1)
  • 系统平均负载:
  • 只在特定时间间隔内运行队列中的平均进程数
  • 通常每个cpu内核到的当前活动进程数不大于3,那么系统的性能良好.如果每个cpu内核的任务数大于5,那么主机的性能有严重问题
  • 如果Linux主机是1个双核cpu,当Load Average为6的时候说明机器已经被充分使用
  • top:实时跟踪当前进程状态相当于windows任务管理器

 内存工具

  •   iostat:统计cpu和设备Io信息
  •   iostat 1 10
  •   pmap命令:进程对应的内存映射
  •   -x :显示详细格式的信息
  •    pmap 1
  • 另一种实现:
  •   cat /proc/PID/maps
  • 系统监控工具
  •       dstat命令:系统资源统计,代替vmstat,iostat
  •      -c:显示cpu相关信息
  •      -d:显示disk相关信息
  •      -g:显示page相关统计数据
  •      -m:显示memory相关统计数据
  •      -n:显示network相关统计数据
  •      -p:显示process相关统计数据
  •      -r:显示io请求相关的统计数据
  •      -s:显示seapped相关的统计数据
  • 进程管理工具

  •   kill命令:
  • 向系统发送控制进程信号,以实现对进程管理,每个信号对应一个数字,
  • 信号名称已SIG开头,不区分大小写
  • 显示当前系统可用信号:kill -l, trap -l
  • 常用信号: man 7 signal
  •    1 :无需关闭进程而让其重读配置文件
  •    2 :终止正在运行的进程;相当于ctrl +c
  •    3:相当于ctrl+\\
  •    9:强制杀死正在运行的进程
  •   15:终止正在运行的进程
  •   18:继续运行
  •   19:后台休眠
  • 指定信号的方法:
  • 信号的数字标识:1 ,2 ,9
  • 信号完整名称: SIGHUP
  • 信号的简写名称:HUP
  •       kill all :杀死全部
  • 示例:
  •  kill -1 PIDOF
  •  kill  PROCESSNAME
  • 按PID :kill [-SIGNAL] pid ...
  •      kill -n SIGNAL pid 
  • 按名称:killall [-SIGNAL] comm
  •  按模式:pkill [option] pattern
  •  -SIGNAL
  •   -u uid:
  • pkill -9 -u user 强制杀掉指定用户所有进程
  •    -u uid: 生效者
  •    -U:真正执行命令者
  •    -l :显示进程的名称
  •    -t: 查看指定终端运行的进程
  •    -P:显示指定进程的进程
  •    -a:显示完整格式的进程名称
  • 安确切的程序名称: /sbin/pidof
  • pidof显示进程编号
  • process 进程
  • thread  线程
  • 在进程到的眼里他拥有除系统以外所有内存
  • 线程可共享资源(l表示有线程)

 Linux的作业控制

  •   前台作业:通过终端启动,且启动后一直占据终端;
  •   后台作业:可通过终端启动,但启动后即转如后台运行
  • 上作业运行与后台
  •    1 运行中作业: Ctrl+z :送往后台,作业会转为停止状态
  •      尚未启动的作业:#COMMAND&
  • 作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业.
  • 如果希望送往后台,剥离与终端的关系
  •    # nohup COMMAND &  # screen;COMMAND
  •  查看当前终端素有作业:
  •   jobs
  • 作业控制:
  •    fg :把指定的后台作业调会前台
  •    bg:让送往后台的作业在后台继续运行
  •   kill 终止指定的作业

linux任务计划,周期性任务执行

  • 未来的某时间点执行一次某任务:at.batch
  • batch:系统自行选择空闲时间去执行此处指定的作业任务
  • 周期性运行某任务:crontab
  •  执行结果:会通过邮件发送给用户

 

  • 首先确定at命令是否处于启动状态
  • chkconfig --list atd 查看其那些模式下处于启动状态
  • service  atd status 查看其服务启动状态

 at命令默认交互式

  •     at [option]...TIME
  •            TIME:
  •            HH:MM[YYYY-mm-dd]
  •            noon,正午时间 , midnight午夜时间,teatime,指下午4点
  •            tomorrow  +具体时间
  •            相对指定 now+#  
  •            UNIT:minutes hours,days,                          
  •  at now+1min xxxx    一分钟以后运行xxxx
  •  示例:  
  •  [[email protected] ~]# at noon
  •      at> echo o<EOT>
  •      job 8 at 2017-05-13 12:00
  • [[email protected] ~]# at now +10days
  •      at> echo p
  •      at> <EOT>
  •      job 9 at 2017-05-22 14:35
  • 编辑额按成后ctrl +d 提交
  • [[email protected] ~]# at 13:20
  •     at> touch op
  •     at> <EOT>
  •   at的作业有队例,用单个字母表示,默认都是用队列,
  •        -V: 显示版本信息
  •        -l 查看 作业队列,相当于atq
  •     [[email protected] ~]# at -l
  •          3   2017-05-13 13:20 a root
  •          如果任务一执行则会消失,任务执行结果信息会通过邮件查看
  •         -f:/PATH/FROM/SOMEFIE:从指定文件中读取作业,而非交互输入
  •         cat filename | at   HH:MM
  • [[email protected] ~]# echo echo  dsd > job
  •  [[email protected] ~]# at -f job 13:30
  •          job 5 at 2017-05-13 13:30
  •          [[email protected] ~]# at -l
  •          5    2017-05-13 13:30 a root
  •          4    2017-05-12 15:30 a root
  • [[email protected] ~]# cat job |at 15:38
  •          job 6 at 2017-05-12 15:38

 

  •         -m:当任务被完成后强制性给用户发邮件
  • [[email protected] ~]# at -m 22:33
  •          at> touch oo
  •         -d:指明删除作业,相当于atrm
  • [[email protected] ~]# at -l
  •          3    2017-05-13 13:20 a root
  •          [[email protected] ~]# at -d 3
  •          [[email protected] ~]# at -l
  •         -c:查看具体作业任务
  •   [[email protected] ~]# cat job |at 15:38
  •           job 7 at 2017-05-12 15:38
  •           [[email protected] ~]# at -c 7
  •          -q:指明队列;
  •     如果定义的任务时间相同那么将会同事执行;  
  •     注意作业执行结果是已邮件发送给提交作业的用户,不会打印到终端.
  •     如果所设定的任务已过当前时间则会在下一次这个时间点执行
  •     重启不会失效,因为其任务存放于"/var/spool/at"文件里.
  • /etc/at.{allow,deny}控制用户是否能执行at任务
  • 白名单at.allow :优先级高,由此文件,deny无效,只有此此文件中的用户可使用at
  • 黑名单at.deny  优限级低,此文件中的用户拒绝,不在此文件允许
  • 如果都没有全都拒绝不包括root用

    周期性任务计划:cron

  •      服务程序:
  •       cronie:主程序包  ,提供了crond守护进程及相关辅助工具; 
  •       确保crond守护进程(daemon)处于运行状态
  •       centos7  systmectl status crond.service  查看
  •       centos6  service crond status 
 
  • 向crond提交作业的方式不同于at, 他需要使用专用配置文件, 此文件固定格式,不建议使用文本编辑器直接编辑此文件;要是用crontab的命令;
  •  cron任务分两类:
  •      系统cron任务:主要用于实现系统自身的维护:
  •      手动编辑: /etc/crontab文件
  •      用户cron任务:
  •      命令:  crontab
  •   系统cron配置格式:
  • 技术分享技术分享
  •      注意:
  •      1 . 每一行定义一个周期性任务:
  •          *****:定义周期性时间任务
  •          username:运行任务的用户身份
  •          comanmd to be executed: 任务
  •       2 .  此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;
  •  示例:
  •       因为 cron 不支持特殊符号所以复杂行的任务可将其写入脚本再加以引用
  •   cp -a /etc/ /app/etcbak-`date +%s`
  • 技术分享技术分享
  •         表示每月,每周,每天,每小时,每分钟 都备份指定任务
  •  用户cron的配置格式: /var/spool/cron/USERNAME
  •  注意:
  •      1 . 每行定义一个corn任务,
  •      2 .  此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者指定以PATH 环境变量;
  •      3 . 邮件发送给当前用户:
  • 管理临时文件:

  •      centos6使用/etc/cron.daiy/tmpwatch定时清除临时文件
  •      centons7使用systemd-tmpfiles-setup服务实现
  •     
  •      /var/log/cron  计划任务日志文件
  • 时间表示法:
  •     1 . 特定值:
  •         给定时间点有效取值范围内的值;
  •         注意:day of week 和dayof moth一般不同时使用;
  •    2 .  *  
  •         给定时间上有效取值范围内的所有值;表示"每..."
  •    3 .  离散取值:
  •         在时间点上使用逗号分隔的多个值;
  •            #,#,#
  •    4 . 连续取值:
  •         在时间点上使用-连接开头和结束
  •         #-#
  •   5,  在指定时间点上,定义步长;/#
  •          /#:#即步长;
  •        */2:每两分钟
  •    注意:指定的时间不能被步长整除时,其意义将不复存在;
  •            最小时间单位为分钟, 想完成"秒级"任务,得需要额外借助其他机制;
  •            定义成每分钟任务;而在利用脚本实现每分钟之内循环执行的次数
  • 示例:
  •     1 . 3 * * * :每小时执行一次; 每小时第3分钟;
  •     2 . 34* * 5;每周五的4点3分; 每周执行一次
  •     3 . 567* *: 每月执行一次:每月的7号的6点5分;
  •     4 . 78910*:每年执行一次:每年的10月9号8点7分;
  •     5 . 98**3,7:每周三和周日; 8点9分
  •     6 . 08,20**3,7: 每周日和周三 :8点和20点
  •     7 . 09-18**1-5: 工作时间内的每小时;周一到周五的白天的9-18点
  •     8 . */5****;每5分钟执行一次某任务;

crontab命令

  •       crontab[-u user]]-l  | -e] [-i][-s]
  •       -e :编辑任务:        
  •   crontab -l 列出所有任务
  •       -r  :移除所有任务;即删除/var/spool/cron/USERNAME文件;
  •       -i :在使用-r选项移除所有任务时提示用户确认;
  •       -u:user:root用户可为指定用户管理cron任务;
  •        crontab -e -u  user:  ROOT指定用户任务    
  •        用户自己也可以创建任务因为其拥有SUID权限
  • [[email protected] ~]# ll /usr/bin/crontab
  •  -rwsr-xr-x. 1 root root 51784 Nov 10  2015 /usr/bin/crontab
  •        crontab -l  查看自己的计划任务
  •        crontab -r 删除自己所有任务
  •        crontab -r -u user 删除指定任务
  •        crontab  -r -u user -i 交互式指定删除
  •    如果误删可以在 /var/spool/cron 日志里
  •    注意:运行结果以邮件通知给当前用户; 如果拒绝接受邮件;
  •     1 COMMAND > /dev/null
  •     2COMMAND  &>/dev/null
  • 注意:
  •     定义 COMMAND时,如果命令需要用到%,需要对其转义;但防止与但因号中的%不用转义亦可;
  •  如果某任务在指定的时间因关机未能执行,下次开机会不会自动执行?
  •   不会
  •  如果期望某时间故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使用anacron实现;
  • 练习:
  •  1 . 每12小时备份一次/etc目录至/backups目录中,保存文件名称格式为"etc-yyyy-mm-dd-hh" 
  • crontab  -e  0 */12 * * * cp -a /etc/ /backups/etc-`date +%F` /
  •  2 . 每周2, 4 ,7备份/var/log/secure文件至/logs目录中,文件格式为"secure-yyyymmdd";
  • crontab -e * * 2,4,7 * * cp -a /var/log/secure  /logs/secure `date +%F`
  •  3 , 每两小时取出当前系统/proc/meminfo文件中以S或M开头的行信息追加至/tmp/meminfo.txt文件中;  
  •            crontab -e  0 */2 * * * grep -E ‘^(S|M)‘ /proc/meminfo >> /tmp/meminfo.txt

 

以上是关于进程管理及计划任务的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程管理及计划任务

进程管理及计划任务

linux进程管理及计划任务

进程和计划任务管理

进程和计划任务管理

Linux/Centos7系统管理之进程与计划任务管理