进程和计划管理
第十节 进程和计划任务管理
进程<bash<shell<kernel
Linux,内存 copy and write 写时复制原理
netstat -antup | grep sshd 查看端口
865/sshd PID 进程名称
子进程的pid号一定大于父进程
三种查看端口号情况的方式
操作系统的多进程机制
开机自启动文件设置命令
进程和计划任务管理
进程============运维:程序
=============开发:资源的集合
PID 进程号
PPID 其父进程号
tty 终端名称(本地登录)
pts远程登录终端名称
===============================================================================
ps命令 查看系统进程
ps中的time是指占用CPU的时间
cmd 正在执行的命令(若有病毒文件,先删除文件(绝对路径),再kill)
############
ps aux 查看进程占用CPU和内存的百分比 ====a 查看所有进程信息 u以用户为主的格式输出进程信息 x显示当前用户在所有终端下的进程信息
ps -ef 显示系统中的进程信息=====e显示系统内所有进程 f 使用完整格式显示进程信息
ps -ef | grep 服务名 用来判断某个服务是否处于启动状态
===============================================================================
top 动态查询系统进程,显示进程排名(默认以CPU占用率排序)
每隔几秒自动刷新,可以查看各个CPU的占用
CPU: 99.7%id----->id指的是CPU可用容量百分比
top -u 指定用户名
top -p 指定进程号
NI:nice值,负值表示高优先级,正值表示低优先级,将优先级调低,可避免在内存溢出时被kill
==========================================================================
查看进程信息
pgrep命令
查看某个服务的PID号
pgrep -l 显示进程名
-U 指定特定用户
-t 指定终端
查看socket
pgrep sshd | head -1
kill `pgrep sshd | head -1`
=====================================
pstree命令
pstree -aup ==========a 显示完整信息 u 列出对应用户名 p 列出对应PID号
=====================================
进程启动方式
vim ttt
不退出,又要查看系统内容 ,
前台启动:用户输入命令,直接执行程序
后台启动:在命令行位加入“&”符号
按Ctrl+z,切换至后台;
fg将后台进程切回前台;
bg将后台暂停的进程调至后台运行;
jobs查看后台有哪些进程
===============================================================================
终止进程
Ctrl+C:中断正在执行的命令
kill,killall,pkill命令
kill 需要根据PID号杀进程
kill PID号=====温柔版本,‘-2’即Ctrl+c‘-9’发送强制终止信号‘-15’发送正常终止信号 先使用-15 再使用-9
killall 需要根据服务名杀进程,因为会把后代杀除
killall -9 服务名=======强杀
pkill 需要根据服务名杀进程,比较强力,但不如killall程度大,不杀后代,却踢人
pkill 还能根据终端名杀进程
pkill -kill 服务名======强杀
pkill -kill -t 终端名====强杀
===============================================================================
Linux操作系统垃圾回收机制原理
通常情况下,子进程由父进程生成;因此,子进程一旦执行结束,默认由他的父进程管理。如果父进程比子进程执行结束的还早,那么子进程会交给父进程的父进程来管理。
加入所有父进程都结束了,默认会交给所有父进程的总进程init进程来管理。
===============================================================================
僵尸进程的产生
子进程执行结束,默认父进程管理;父进程比子进程先结束,由父进程的父进程进行管理;若,父进程执行结束,但是父进程未连接到其父进程管理其子进程
导致子进程被遗忘,无管理;此时,子进程为僵尸进程;
代码由开发编写,父进程结束后由父进程的父进程对子进程进行管理的代码也是由开发编写的,如果开发忘记编写,导致服务器运行这个程序,就会发生子进程未被管理的情况
===============================================================================
僵尸进程的后果
最可怕的后果并不是资源的占用,因为一个进程占不了多少资源,严重的是,僵尸进程会永远占用PID号(操作系统的PID号有上限 65535),如果达到上限,Linux会默认什么服务都不能开启
===============================================================================
排查僵尸进程
方法一:
top
第二行最后一个单词zombie,僵尸
方法二:
ps aux
查看STAT下,若出现Zz的进程,出现僵尸进程
ps aux | grep "^Zz$" | wc -l
方法三:
ps -ef -o pid,stat ,cmd=======-o 指定输出的字段名 cmd 显示命令
查看STAT下,若出现Zz的进程,出现僵尸进程
===============================================================================
调度启动
使用at命令,设置一次性任务计划(at命令需要进行yum安装,前提是对应的系统服务atd必须已经运行;计划任务执行任务的时间必须安排在当前系统时间后)
服务脚本:/etc/init.d/atd
设置格式:at 18:40 设置当天的任务计划可不加日期
基本操作:Ctrl+D 保存退出
atq 查询现有的一次性任务计划
atrm+任务序号 删除第几项任务
设置在今天18:40自动执行:统计该时间系统中由root用户运行的进程数量,并将该数值保存到/tmp/ps.root文件中
[ ] at 18:40
at>pgrep -U root | wc -l >/tmp/ps.root
设置在2016年1月14日晚上22:00自动关机
先查看date ,当前日期
[ ] date
[ ]at 22:00 2016-1-14
at> init0
设置七天后晚上22:00自动关机
设置明天晚上22:00重启httpd服务
===============================================================================
定时任务 crond
Linux系统自身定期执行的任务工作:系统周期性自行执行的任务工作。
/var/log/messages* #系统的日志,每七天自动切割
用户执行的任务工作:某个用户或系统管理员定期要做的任务工作
定时任务可以有五个时间段:*分 *时 *日 *月 *周
* * * * * 命令
===============================================================================
用crontab命令,设置周期性计划任务
ll /var/spool/cron/ 存放定时任务的目录
crontab -l 查看当前用户的定时任务
crontab -e 进入编辑状态,相当于打开vim,命令要用绝对路径
crontab -u 指定用户设置定时任务,只有root用户可用
crontab -r 删除定时任务(递归删除)
主要设置文件
全局设置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
* * * * * 用户 绝对路径(不写用户,默认在root下执行)
eg:
* * * * * /bin/echo"111111" >> /tmp/yunjisuan.txt */5 表示每隔五分钟
回车
此时,crontab -e中产生新的定时任务
ll /var/spool/cron/
出现root用户的定时文件
ll /var/log/cron/ 查看定时任务的日志文件
查看定时任务的日志文件
tail /var/log/cron
从定时任务的命令里看到,定时任务被执行了两次(一分钟一次),
tail -f /var/log/cron/
动态追踪
定时任务配置文件 /etc/crontab
SHELL=/bin/bash用/bin/bash去解析定时任务文件里的命令
PATH 环境变量 告诉Linux去哪里找命令
如果PATH里的变量赋值为空,外置命令不能执行,内置命令可以执行,解决方法:手动写路径找回
(定时任务配置文件里的PATH环境变量与Linux操纵系统的PATH不一致,导致有的任务在Linux能找到,但定时任务里找不到,所以要求定时任务里的命令必须用绝对路径)
export 全局声明,将后面的变量进行全局生效;此时,同一个父进程下的所有子进程生效,但再生成的子进程就不生效了。
MAILTO=root 指定邮件发送用户 定时任务有数据输出时,会给root发邮件
Service postfix status 查看邮件服务状态
HOME=/ 定时任务启动路径永远从根开始
echo $PATH
对用户设置定向任务
要求:要关注定时任务环境变量,命令起始点在根下;
定时任务不能有任何屏幕输出,不能产生垃圾输出,垃圾文件重定向到> /dev/null 2>&1或>/dev/null 2 > /dev/null
如果关闭邮件服务,就不会产生邮件,邮件发不出去,定时任务会产生屏幕输出的话,就会在/var/spool/postfix/maildrop/下生成许多小文件,小文件过多会让服务器无法工作
因为 ll -i 中查看的inode号有上限,一旦inode达到上限就无法创建文件(即使磁盘还有空间)
磁盘的大小查看:
df -h 磁盘的真实容量大小 Use% 磁盘使用空间
df -hi 磁盘的inode号 IUse% inode号使用空间
这两个容量一旦有一个达到上限,磁盘都无法存数据
分钟:00-59
小时:00-23 (24点用00表示)
日:1-31
月:1-12
周:0-6 (周日代表0)
* 表示任意时间
/ 指定间隔的时间频率
5,15 表示5点、下午3点
5-15 表示5点到下午3点
JVM 中的OOM(out of memory)内存溢出,涉及到操作系统优先级,轮询机制,按优先级一个一个kill
=======================================================================================================================
进程和计划任务管理
进程============运维:程序
=============开发:资源的集合
PID 进程号 PPID 其父进程号
tty 终端名称(本地登录)
pts远程登录终端名称
==================================
ps命令 查看系统进程
ps中的time是指占用CPU的时间
cmd 正在执行的命令
############
ps aux 查看进程占用CPU和内存的百分比 ====a 查看所有进程信息 u以用户为主的格式输出进程信息 x显示当前用户在所有终端下的进程信息
ps -ef 显示系统中的进程信息=====e显示系统内所有进程 f 使用完整格式显示进程信息
ps -ef | grep 服务名 用来判断某个服务是否处于启动状态
====================================
top 动态查询系统进程,显示进程排名(默认以CPU占用率排序)
每隔几秒自动刷新,可以查看各个CPU的占用
CPU: 99.7%id----->id指的是CPU可用容量百分比
top -u 指定用户名
top -p 指定进程号
详细解释要看一遍 了解;
===================================
pgrep命令
查看某个服务的PID号
pgrep -l 显示进程名
-U 指定特定用户
-t 指定终端
查看socket
pgrep sshd | head -1
kill `pgrep sshd | head -1`
=====================================
pstree命令
pstree -aup ==========a 显示完整信息 u 列出对应用户名 p 列出对应PID号
=====================================
进程启动方式
vim ttt
不退出,又要查看系统内容 ,
按Ctrl+z,切换至后台;
fg将后台进程切回前台;
bg将后台暂停的进程调至后台运行;
jobs查看后台有哪些进程
=====================================
kill,killall,pkill命令
kill 需要根据PID号杀进程
kill PID号=====温柔版本,‘-9’强杀
killall 需要根据服务名杀进程,因为会把后代杀除
killall -9 服务名=======强杀
pkill 需要根据服务名杀进程,比较强力,但不如killall程度大,不杀后代,却踢人
pkill 还能根据终端名杀进程
======================================
Linux操作系统垃圾回收机制原理
通常情况下,子进程由父进程生成;因此,子进程一旦执行结束,默认由他的父进程管理。如果父进程比子进程执行结束的还早,那么子进程会交给父进程的父进程来管理。
加入所有父进程都结束了,默认会交给所有父进程的总进程init进程来管理。
======================================
僵尸进程的产生
子进程执行结束,默认父进程管理;父进程比子进程先结束,由父进程的父进程进行管理;若,父进程执行结束,但是父进程未连接到其父进程管理其子进程
导致子进程被遗忘,无管理;此时,子进程为僵尸进程;
代码由开发编写,父进程结束后由父进程的父进程对子进程进行管理的代码也是由开发编写的,如果开发忘记编写,导致服务器运行这个程序,就会发生子进程未被管理的情况
======================================
僵尸进程的后果
最可怕的后果并不是资源的占用,因为一个进程占不了多少资源,严重的是,僵尸进程会永远占用PID号(操作系统的PID号有上限 65535),如果达到上限,Linux会默认什么服务都不能开启
======================================
排查僵尸进程
方法一:
top
第二行最后一个单词zombie,僵尸
方法二:
ps aux
查看STAT下,若出现Zz的进程,出现僵尸进程
ps aux | grep "^Zz$" | wc -l
方法三:
ps -ef -o pid,stat ,cmd=======-o 指定输出的字段名 cmd 显示命令
=======================================
调度启动
使用at命令,设置一次性任务计划
服务脚本:/etc/init.d/atd
设置格式:at 18:40 设置当天的任务计划可不加日期
基本操作:Ctrl+D 保存退出
atq 查询现有的一次性任务计划
atrm+任务序号 删除第几项任务
设置在今天18:40自动执行:统计该时间系统中由root用户运行的进程数量,并将该数值保存到/tmp/ps.root文件中
[ ] at 18:40
at>pgrep -U root | wc -l >/tmp/ps.root
设置在2016年1月14日晚上22:00自动关机
先查看date ,当前日期
[ ] date
[ ]at 22:00 2016-1-14
at> init0
设置七天后晚上22:00自动关机
设置明天晚上22:00重启httpd服务
=======================================
还差教案上的110-112页内容!!!
crond 视频学习!!!
定时任务 crond
Linux系统自身定期执行的任务工作:系统周期性自行执行的任务工作。
/var/log/messages* #系统的日志,每七天自动切割
用户执行的任务工作:某个用户或系统管理员定期要做的任务工作
定时任务可以有五个时间段:*分 *时 *日 *月 *周
* * * * * 命令
eg: 用crontab命令,
ll /var/spool/cron/ 存放定时任务的目录
crontab -l 查看当前用户的定时任务
crontab -e 进入编辑状态,相当于打开vim,命令要用绝对路径
* * * * * 绝对路径
eg:
* * * * * /bin/echo"111111" >> /tmp/yunjisuan.txt */5 表示每隔五分钟
回车
此时,crontab -e中产生新的定时任务
ll /var/spool/cron/
出现root用户的定时文件
ll /var/log/cron/ 查看定时任务的日志文件
查看定时任务的日志文件
tail /var/log/cron
从定时任务的命令里看到,定时任务被执行了两次(一分钟一次),
tail -f /var/log/cron/