- 进程管理
程序:通常为二进制程序放在存储媒介中(如光盘、硬盘、软盘、磁带等),以物理文件的形式存在;
进程:正在运行当中的程序,程序被触发后,执行者的权限与属性、程序的程序代码与所有数据等都会被加载到内存中,操作系统并给予这个内存单元一个标识符(PID)。
如图:
那么查看进程请使用命令:ps aux
所有的程序都会产生进程
锁定相关的命令:
ps aux | grep http
#相对的来说,就是grep + 服务名称
- 子进程和父进程
也就是“衍生出来的进程”,当我们登陆系统后,会取得一个bash的shell,然后使用这个bash提供的接口再去执行另一个命令,如/usr/bin/passwd或者touch等,那些另外的命令也会被触发成为PID,这个后来执行命令产生的PID就是“子进程”
例如:
那么如何来做进程管理?
首先进程管理有什么作用?
n 判断服务器的健康状态,了解服务器CPU,内存的占用情况等。
n 查看系统中的所有进程
n 杀死进程
进程的查看ps 和pstree 命令
查看所有进程的命令:
n Ps aux 或者 ps –le
#查看系统中所有进程
n Man ps
#查看命令解释
n Logout
#正常退出用户登录
如何理解ps aux 命令输出的信息
l USER: 该进程是由那个用户产生的。
l PID: 进程的ID号;
l %CPU: 该进程占用CPU资源的百分比,占用越高,进程越消费资源
l %MEM: 该进程占用物理内存的百分比,占用越高,进程越消费资源
l VSZ: 该进程占用虚拟内存的大小,单位KB
l RSS: 该进程占用实际物理内存的大小,单位KB
l TTY: 该进程是在哪个终端中运行的,其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形界面,pts/0-225代表虚拟终端
l STAT: 进程状态,常见的状态有:
R: 运行
S: 睡眠
T: 停止状态
s: 包含子进程
+: 位于后台
l START: 该进程的启动时间
l TIME: 该进程占用CPU 的运算时间,注意不是系统时间
l COMMAND: 产生此进程的命令名
注意:
/sbin/init 的PID 一定是1,它是系统启动运行的第一个进程。(你使用的linux系统不同,文件名称和路径会有区别)
TTY 为? 可以理解为系统进程,因为没有终端
那么在了解一下更简单的命令:pstree
n Pstree 是显示进程树形结构
-p : 查看包括子进程部分,也就是每个进程的PID号
-u : 显示进程的用户
进程的查看-top 命令
Top命令是查看系统健康的重要命令
n 默认每3秒钟,会自动刷新进程状态
选项:
-d 秒数: 指定top命令每隔几秒更新,默认是3秒
-b :使用批处理模式输出,一般和“-n”选项合用
-n次数:指定top命令执行的次数,一般和“-b”选项合用
在top命令的交互模式中可以执行的命令:
?或h:显示交互模式的帮助
P : 以CPU使用率排序,默认就是此项
M : 以内存的使用率排序
N : 以PID排序
q : 退出top
这些选项的用法例如shift + P 才有效果,这是因为命令功能区分大小写
Top 命令下第一行的描述内容:
第一行信息为任务队列信息
12:26:46 是系统当前时间
Up 86 days,13:32 是系统运行时间,本机已经运行了86天13小时32分钟
2 users 表示登录了两个用户
Load average: 0.00,0.00,0.00 表示系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小,如果大于1,系统已经超出负荷。(这里需要注意的是这个1 是单核数,如果是双核则不大于2,以此类推,当内核为4,就不能大于4)
第二行
Tasks:95 total 表示系统中的进程总数
1 running 表示正在运行的进程数
94 sleeping 表示睡眠中的进程
0 stopped 表示正在停止的进程
0 zombie 表示僵尸进程,如果不是0,需要手工检查僵尸进程
第三行
Cpu(s): 0.1%us 表示用户模式占用的CPU百分比
0.1%sy 表示系统模式占用的CPU百分比
0.0%ni 表示改变过优先级的用户进程占用的CPU百分比
99.7%id 表示空闲CPU的CPU百分比
0.1%wa 表示等待输入/输出的进程的占用CPU百分比
0.0%hi 表示硬中断请求服务占用的CPU百分比
0.1%si 表示软中断请求服务占用的CPU百分比
0.0%st 表示st(Steal time)虚拟机时间百分比,就是当有虚拟机时,虚拟机CPU
等待实际CPU的时间百分比
第四行
Mem:625344k total 表示物理内存总量,单位KB
571504k used 表示已经使用的物理内存数量
53840k free 表示空闲的物理内存数量,注意如果使用的是虚拟机就要注意虚拟机被分配的多少
65800K buffers 作为缓冲的内存数量
第五行
交互分区的信息
Swap:524280K total 表示交换分区(虚拟内存)的总大小
0k used 表示已经使用的交互分区的大小
524280k free 表示空闲交换分区的大小
409280k cached 表示作为缓存的交互分区的大小
Top 只能看到部分的进程内容
要想看到所有的进程情况,可以使用
命令:top –b –n 1 > /root/top.log
把top的内容写出到top.log中
# top –b 表示批量模式输出,-n表示使用top 刷新多少次。
命令:vi top.log
#查看文本内容
#输入点击insert,进入输入内容
# esc 退出输入命令
#保存文本 命令:w
#退出文本编辑器使用 命令: :q
一.杀死进程
- kill 命令
kill –l
#查看所有信号
例如使用:kill -1 2235
#重启进程
Kill -9 2236
#强制杀死单一进程
Kill -15 2234
#以正常的步骤结束一项工作
- killall [选项][信号] 进程名
#按照进程名杀死进程
选项:
-i 交互式,询问是否要杀死某个进程
-I 忽略进程名的大小写
- pkill
pkill -9 –t pts/1
#强制杀死从pts/1虚拟机终端登录的进程
按照终端号踢出用户
命令W
#使用w命令查询本机已经登录的用户
三,进程优先级的修改。
- 启动服务是设置优先级
- 修改已经存在的进程的优先级
但是这部分对于一般的系统管理员来说,不太涉及
命令:ps –le
#查询所有进程优先级
PRI代表Priority,Ni代表Nice,两个值都代表优先级,数字越小代表该优先级越高。
NI的值的范围是-20 到19
普通用户调整NI值得范围为0到19
Root用户才能设定进程NI值为负值,也可以调整任何用户的进度。
一.工作管理
命令:jobs
#把进程放入后台
命令tar –zcf etc.tar.gz /etc &
#把命令放入后台,并在后台执行
命令 top
#按下ctrl+z快捷键,放入后台暂停
比如说可以把能持续一段时间的命令放入后台,
例如:我把top命令放入后台执行
命令 top &
命令jobs –l
#显示工作的PID
但是状态是停止的,以为top命令是给用户看的,会有交互动作
注意:“+”号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。“-”号代表倒数第二个放入后台的工作。
如何把后台的工作放入前台
命令: fg %工作号
参数:
-% 工作号:% 号可以省略,但是注意工作号和PID的区别
恢复到后台运行
命令:bg %工作号
控制台记不住自己文件的路径,可以使用命令find 进行查找
命令 find / -name uwsgi
#查找,根下面名称为uwsgi的文件
例如:
如果让命令脱离终端运行?
比如说我开了一个终端A,后台执行了一个top命令
那么我再开一个终端B,可以查询到之前的那个命令,如果我把终端A 关闭,那么top命令的任务就会也被结束掉
有三种办法可以让命令脱离终端
- 把需要后台执行的命令写入/etc/rc.local文件
- 使用系统定时任务,让系统在指定的时间执行某个后台命令
- 使用nohup命令
来写一个.sh可执行命令文件,里面增加for循环内容(这里可以讲解一下Shell脚本)
文件一类。
输出就分为了两类:标准输出(standard output )和标准错误输出(standard error output)
A: 标准输出:代码为1,使用> 或者>>;
B: 标准错误输出:代码为2,使用2>或者2>>;
其中 > 和>> 的区别:
#如果重定向的文件不存在,那么创建;
#如果文件存在那么清空数据,再写入;
# >输出到一个已经存在的文件中,会覆盖掉原来的内容;
# >>表示在原来的文件数据基础上进行累加;
- 2>&1
# 表示把正确和错误的输出都写入一个文件中(这是针对写入相同文件的特殊写法)
# 分开写入不同的文件方式写为 > /home/right.txt 2> /home/error.txt
- 那么后台执行命令就变成了如下:
- 命令 ll /
#查看系统根目录下面文件名,权限和属性
四.如何做定时任务,去监测脚本再运行如果异常并发送mail--?
例行性工作使用(crontab)
循环执行的例行性工作调度
- Root账号可以限制使用crontab的用户
限制数据方式
/etc/cron.allow
#将可以使用crontab的账号写入其中,如果不在这个文件内账户就不可使用crontab。
/etc/cron.deny
#将不使用crontab的账号写入其中,那么没有记录到这个文件的账号就可以使用crontab
Crontab的语法
# crontab [-u username] [-l|-e|-r]
参数:
-u:只有root才能进行这个任务,就是可以帮其他用户新建/删除crontab工作调度;
-e:编辑crontab的工作内容;
-l:查看crontab的工作内容;
-r:删除所有crontab的工作内容,如果只删除一项,那么请使用-e去删除。
要实现的是,通过定时任务给自己发送mail
- 要配置邮件服务器
首先确认你的系统是什么版本的
命令:cat /proc/version
然后再确认如何来安装mail
先查看是否有安装mail
#直接输入mail命令,如果没有安装会提示无法识别mail命令
#如果有安装那么就可以提示是否有收到mail
安装mail (就是一些包)
命令
Yum install mutt
Yum install swaks
yum install mailx
测试发送mail,但是如果不修改配置文件,那么只能发发本机环境的各个用户了
要发送给外部邮箱,请配置邮件配置文件
例如:
这里需要简单说明命令
Mail root –s “hello”
#表示当前账号下面有接收到的邮件
命令 mail soar.pang@quantacn.com
会进入主题输入
正文输入
要结束正文输入需要先换行打 . 回车后退出
如果想要知道mail里面的内部命令,那么使用
命令 ?
如果要查看账号下面是否有账号mail
命令: mail
# 可显示当前账号下面收到的mail
& 后面可以输入对mail控制的命令
& d 删除mail
& q 退出mail管理
配置mail文件提供接收的邮件服务器
如下:
Cat /etc/mail.rc
#查看文件配置内容
Vi /etc/mail.rc
#编辑配置信息
命令:crontab –e
#此时会进入vi编辑页面,可以编辑工作,每项工作一行。
编辑完成后可以输入:wq进行写入后退出
每项工作格式具有六个字段,每个字段含义如下:
分钟:0~59
小时:0~23
日期:1~31
月份:1~12
周:0~7 其中周是比较有趣的 0 和7 都表示星期天
另外还有一些辅助字符
*(星号):代表任何时候都接受的意思
,(逗号):代表分隔时间段 例如:0 3,6 * * * command
#表示3点、6点各执行一次
-(减号):代表一段时间范围
/n(斜线):n代表数字,表示间隔n个单位的意思。例如: */5 表示每隔5分钟。