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