1-1 课程介绍及Linux进程管理的作用 系统管理 ● 一、进程管理 ● 二、工作管理 ● 三、系统资源查看 ● 四、系统定时任务 进程管理 ● 1、进程管理简介 ● 2、进程的查看ps命令和pstree命令 ● 3、进程的查看top命令 ● 4、杀死进程 ● 5、修改进程优先级 1、进程简介 ◆ 进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。 2、进程管理的作用 ◆ 判断服务器健康状态 ◆ 查看系统中所有进程 ◆ 杀死进程 1-2 [Linux]进程的查看ps命令 查看所有进程 ● ps aux #查看系统中所有进程,使用BSD操作系统格式 ● ps -le #查看系统中所有进程,使用Linux标准命令格式 ● 选项 a:显示一个终端的所有进程,除了会话引线 u:显示进程的归属用户及内存的使用情况 x:显示没有控制终端的进程 -l:长格式显示。显示更详细的信息 -e:显示所有进程,和-A左右一样 ps命令的输出 ◇ USER:该进程是由哪个用户产生的; ◇ PID:进程的ID号; ◇ %CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源; ◇ %MEM:该进程占用物理内存 百分比,占用越高,进程越耗费资源; ◇ VSZ:该进程占用虚拟内存的大小,单位KB; ◇ RSS:该进程占用实际物理内存的大小,单位KB; ◇ TTY:该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pst/0-255代表虚拟终端。 ◇ STAT:进程状态。常见的状态有; ➢ R:运行 ➢ S:睡眠 ➢ T:停止状态 ➢ s:包含子进程 ➢ +:处于后台 ◇ START:该进程的启动时间 ◇ TIME:该进程占用CPU的运算时间,注意不是系统时间 ◇ COMMAND:产生此进程的命令名 查看进程树 ● [root@localhost ~]# pstree [选项] ● 选项: ● -p:显示进程的PID ● -u:显示进程的所属用户 1-3 [Linux]进程的查看top命令 查看系统健康状态 ● [root@localhost ~]# top [选项] ● 选项: ➢ -d秒数:指定top命令每隔几秒刷新。默认是3秒 ➢ -b:使用批处理模式输出。一般和“-n”选项合用 ➢ -n次数:指定top命令执行的次数。一般和“-b”选项合用 ● 在top命令的交互模式当中可以执行的命令: ➢ ?或h:显示交互模式的帮助 ➢ P:以CPU使用率 ,默认就是此项 ➢ M:以内存的使用率排序 ➢ N:以PID排序 ➢ q:退出top 第一行信息为任务队列信息 内容 说明 12:26:46 系统当前时间 up 1day,13:32 系统的运行时间,本机已经运行1天13小时32分钟 2 users 当前登录了两个用户 Load average:0.00,0.00,0.00 系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。 第二行为进程信息 内容 说明 Task:95 total 系统中的进程总数 1 running 正在运行的进程数 94 sleeping 睡眠的进程数 0 stopped 已停止的进程数 0 zombie 僵尸进程数。如果不是0需要手工检查僵尸进程 第三行为CPU信息 内容 说明 Cpu(s):0.1% 用户模式占用的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 空闲的物理内存数量,我们使用的是虚拟机,总共只分配了628MB内存,所以只有53MB的空闲内存了 65800k buffers 作为缓冲(加速了数据的写入)的内存数量 第五行为交换分区(swap)信息 内容 说明 Swap:524380k total 交换分区(虚拟内存)的总大小 0k userd 已经使用的交换分区的大小 524380k free 空闲交换分区的大小 409280k cached 作为缓存(加速了数据的读取)的交换分区的大小 使用top查看所有进程 ● top -b -n 1 > /root/top.log 1-4 [Linux]杀死进程 1、kill命令 ● [root@localhost ~]# kill –l #查看可用的进程信号 #Linux支持1-64共64个进程信号 ● kill -1 2235 #重启PID为2235进程 ● kill -9 2236 #强制杀死PID为2236的进程 信号代号 信号名称 说明 1 SIGHUP 该信号让进程立即关闭,然后重新读取配置文件之后平滑重启而不。 2 SIGINT 程序终止信号,用于终止前台进程。相当于输入Ctrl+c快捷键。 8 SIGFPE 在发生致命的算数运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为0等其它所有的算术的错误。 9 SIGKILL 用来立即结束程序的运行,本信号不能被阻塞、处理和忽略。一般用于强制终止进程。 14 SIGALRM 时钟定时信号,计算的是实际的实际或时钟时间,alarm函数使用该信号。 15 SIGTERM 正常结束进程的信号,kill命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试SIGKILL信号,也就是信号9。 18 SIGCONT 该信号可以让暂停的进程执行,本信号不能被阻断。 19 SIGSTOP 该信号可以暂停前台进程,相当于输入Ctrl+z快捷键。本信号不能被阻断。 2、killall命令 ● killall [选项] [信号] 进程名 #按照进程名杀死进程 ● 选项: ➢ -i:交互式,询问是否要杀死某个进程 ➢ -I:忽略进程名的大小写 3、pkill命令 ● pkill [选项] [信号] 进程名 #按照进程名终止进程 ● 选项: ● -t 终端号:按照终端号踢出用户 按照终端号踢出用户 ● w #使用w命令查询本机已经登录的用户 ● pkill -9 -t pts/1 #强制杀死从pts/1虚拟终端登录的进程 1-5 [Linux]修改进程优先级 进程优先级简介 ● Linux操作系统是一个多用户、多任务的操作系统,Linux系统中同时运行着非常多的进程,但是CPU在同一个时钟周期内只能运算一个指令。进程优先级决定了每个进程处理的先后顺序。 ● PRI代表Priority,NI代表Nice。这两个值都是优先级,数字越小代表该进程优先级越高。 修改NI值时有几个注意事项 ● NI的值的范围是-20到19; ● 普通用户调整NI值的范围是0到19,而且只能调整自己的进程; ● 普通用户只能调NI值,而不能降低,如原本NI值为0,则只能调整为大于0; ● root用户才能设定进程NI值为负值,而且可以调整任何用户的进程; ● PRI(最终值)=PRI(原始值)+NI; ● 用户只能修改NI的值,不能直接修改PRI。 Nice命令 ● nice [选项] 命令 #nice命令可以给新执行的命令直接赋予NI值,但是不能修改已经存在进程的NI值。 ● 选项: ● -n NI值:给命令赋予NI值。 ● 例如: ● nice -n -5 service httpd start renice命令 ● renice [优先级] PID #renice命令是修改已经存在进程的NI值的命令 ● 例如: ● renice -10 2125 2-1 [Linux]工作管理简介 工作管理 ● 工作管理简介 ● 工作管理方法 ● 后台命令脱离登录终端执行 工作管理简介 ● 工作管理指的是在单个登录终端中(也就是登录的shell界面中)同时管理多个工作的行为。 把工作放入后台,类比到Windows中就是最小化,Linux中查看后台工作的命令就是jobs,因此叫工作管理。 注意事项 ● 当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作 ● 放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作 ● 放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行 2-2 [Linux]工作管理方法 1、把进程放入后台 ● tar –zcf etc.tar.gz /etc & #把命令放入后台,并在后台执行 ● top #按下Ctrl+z快捷键,放在后台暂停 2、查看后台的工作 ● jobs [-l] ● 选项: ● -l:显示工作的PID ● 注:“+”号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。“-”号代表倒数第二个放入后台的工作 3、将后台暂停的工作恢复到前台执行 ● [root@localhost ~]# fg %工作号 ● 参数: %工作号:%号可以省略,但是注意工作号和PID的区别 4、把后台暂停的工作恢复到后台执行 ● [root@localhost ~]# bg %工作号 ● 注:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行 2-3 [Linux]后台命令脱离终端 简介 ● 把命令放入后台,只能在当前登录终端执行。一旦退出或关闭终端,后台程序就会停止。 后台命令脱离登录终端执行的方法 ● 第一种方法是把需要后台执行的命令放入/etc/rc.local文件(推荐) ● 第二种方法是使用系统定时任务,让系统在指定的时间执行某个后台命令(不推荐) ● 第三种方法是使用nohup命令(推荐) nohup命令 ● nohup [命令] & 举例 ● vi for.sh #!/bin/bash for((i=0;i<=1000;i=i+1))←循环1000次 do echo 11 >> /root/for.log sleep 10s done ● nohup /root/for.sh & 3-1 [Linux]系统资源查看 1、vmstat命令监控系统资源 ● vmstat [刷新延时] [刷新次数] ● 例如: vsmstat 1 3 ● procs:进程信息字段: r:等待运行的进程数,数量越大,系统越繁忙。 b:不可被唤醒的进程数量,数量越大,系统越繁忙。 ● momory:内存信息字段: swpd:虚拟内存的使用情况,单位KB。 free:空闲的内存容量,单位KB。 buff:缓冲的内存容量,单位KB。 cache:缓存的内存容量,单位KB。 ● swap:交换分区的信息字段: si:从磁盘中交换到内存中数据的数量,单位KB。 so:从内存中交换到磁盘中数据的数量,单位KB。 此两个数越大,证明数据需要经常在磁盘和内存之间交换,系统性能越差。 ● io:磁盘读写信息字段: bi:从块设备读入数据的总量,单位是块。 si:写到块设备的数据的总量,单位是块。 此两个数越大,代表系统的I/O越繁忙。 ● system:系统信息字段: in:每秒被中断的进程次数。 cs:每秒钟进行的事件切换次数。 此两个数越大,代表系统与接口设备的通信非常繁忙。 ● cpu:cpu信息字段: us:非内核进程消耗CPU运算时间的百分比。 sy:内核进程消耗CPU运算时间的百分比。 id:空闲CPU的百分比。 wa:等待I/O所消耗的CPU百分比。 st:被虚拟机所盗用的CPU百分比。 2、dmesg开机时内核检查信息 ● dmesg ● dmesg | grep CPU 3、free命令查看内存使用状态 ● free [-b|-k|-m|-g] ● 选项: -b:以字节为单位显示 -k:以KB为单位显示,默认就是以KB为单位显示 -m:以MB为单位显示 -g:以GB为单位显示 ● 第一行:total是总内存数,used是已经使用的内存数,free是空闲的内存数,shared是多个进程共享的内存总数,buffers是缓冲内存数,cached是缓存内存数。默认单位是KB。 ● 第二行:-/buffers/cache的内存数,相当于第一行的used-buffers-cached。 +/buffers/cache的内存数,相当于第一行的free+buffers+cached。 ● 第三行:total是swap的总数;used是已经使用的swap数,free是空闲的swap数。默认单位是KB。 缓存和缓冲的区别 ◆ 简单来说缓存(cache)是用来加速数据从硬盘中“读取”的,而缓冲(buffers)是用来加速数据“写入”硬盘的。 4、查看CPU信息 ● cat /proc/cpuinfo 5、uptime命令 ● uptime #显示系统的启动时间和负载,也就是top命令的第一行。w命令也可以看到这个数据。 6、查看系统与内核相关信息 ● uname [选项] 选项: -a:查看系统所有相关的信息 -r:查看内核版本 -s:查看内核名称 判断当前系统的位数 ● file /bin/ls 注意: ①这里的/bin/ls可以换成任意的外部命令 ②前面cat /proc/cupinfo看到的是cpu位数,在64位cpu中是可以装32位操作系统的。 查看当前Linux系统的发行版本 ● lsb_release -a 7、列出进程打开或使用的文件信息 ● lsof [选项] #列出进程调用或打开的文件的信息 选项: -c 字符串:只列出以字符串开头的进程打开的文件 -u 用户名:只列出某个用户的进程打开的文件 -p PID:列出某个PID进程打开的文件 ● 举例: ● lsof | more #查询系统中所有进程调用的文件 ● lsof /sbin/init #查看某个系统文件被哪个进程调用 ● lsof -c httpd #查看httpd进程调用了哪些文件 ● lsof -u root #按照用户名,查询某用户的进程调用的文件名 4-1 [Linux]at一次执行 Windows中的计划任务在开始->附件->系统工具->任务计划程序。 四、系统定时任务 ● at一次性定时任务 ● crontab循环定时任务 ● 系统的crontab设置 ● anacron配置 1、确定at安装 ● chkconfig --list | grep atd #at服务是否安装 ● service atd start #at服务的启动 2、at的访问控制 ● 如果系统中有/etc/at.allow文件,那么只由写入/etc/at.allow文件(白名单)中的用户可以使用at命令(/etc/at.deny文件会被忽略)。 ● 如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件,那么写入/etc/at.deny文件(黑名单)中的用户不能使用at命令。对root不起作用。 ● 如果系统中这两个文件都不存在,那么只有root用户可以使用at命令。 3、at命令 ● at [选项] 时间 选项: -m:当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户 -c 工作号:显示该at工作的实际内容 ● 时间: HH:MM例如:02:30 HH:MM YYYY-MM-DD例如:02:30 2013-07-25 HH:MM[am|pm] [month] [date]例如:02:30 July 25 HH:MM[am|pm] + [minutes|hours|days|weeks]例如:now + 5minutes 4、例子1 ● at now +2 minutes #在两分钟之后执行hello.sh脚本 at> /root/hello.sh >> /root/hello.log 如果Backspace无法删除,用Ctrl+Backspace删除。 Ctrl+d保存at任务,回到终端。 例子2 ● at 02:00 2013-07-26 #在指定的时间重启 at> /bin/sync at> /sbin/shutdown -r now 5、其他at管理命令 ● atq #查询当前服务器上的at工作 ● atrm [工作号] #删除指定的at任务 4-2 [Linux]crontab循环定时任务(上) 1、crond服务管理与访问控制 ● [root@locathost ~]# chkconfig --list | grep crond ● [root@locathost ~]# service crond restart ● [root@locathost ~]# chkconfig crond on 访问控制 ● 当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用crontab命令,没有写入的用户不能使用crontab命令。 同样如果有此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高。 ● 当系统中只有/etc/cron.deny文件时,则写入此文件的用户不能使用crontab命令,没有写入文件的用户可以使用crontab命令。对root不起作用。 2、用户的crontab设置 ● [root@localhost ~]# crontab [选项] 选项: -e:编辑crontab定时任务 -l:查询crontab任务 -r:删除当前用户所有的crontab任务 ● [root@localhost ~]# crontab –e #进入crontab编辑界面。会打开vim编辑你的工作。 :wq保存退出,就会生效。 * * * * * 执行的任务 项目 含义 范围 第一个“*” 一小时当中的第几分钟 0-59 第二个“*” 一天当中的第几小时 0-23 第三个“*” 一个月当中的第几天 1-31 第四个“*” 一年当中的第几月 1-12 第五个“*” 一周当中的星期几 0-7(0和7都代表星期日) 特殊符号 含义 * 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。 , 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令。 - 代表连续的时间范围。比如“0 5 * * 1-6 命令”,代表在周一到周六凌晨5点0分执行命令。 */n 代表每隔多久 一次。比如“*/10 * * * * 命令”,代表每隔10分钟就一遍命令。 时间 含义 45 22 * * * 命令 在22点45分执行命令。 0 17 * * 1 命令 每周1的17点0分执行命令。 0 5 1,15 * * 命令 每月1号和15号的凌晨5点0分执行命令。 40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令。 */10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令。 0 0 1,15 * 1 每月1号和15号,每周1的0点0分都会执行命令。 注意:星期几和几号最好不要同时出现,因为它们定义的都是天。 非常容易让管理员混乱。 举例 ● */5 * * * * /bin/echo “11” >> /tmp/test ● 5 5 * * 2 /sbin/shutdown -r now ● 0 5 1,10,15 * * /root/sh/autobak.sh 3、常用命令 ● crontab -l #查看当前用户的crontab任务 ● crontab -r #删除当前用户所有的定时任务,如果不想删除所有的定时任务,只删除其中一部分,用crontab -e删除某些 4、crontab注意事项 ● 六个选项都不能为空,必须填写。如果不确定使用“*”代表任意时间。 ● crontab定时任务,最小有效时间是分钟,最大时间范围是月。 像2018年某时执行,3点30分30秒这样的时间都不能识别。 ● 在定义时间时,日期和星期最好不要在一条定时任务中出现。 因为它们都是以天为单位,非常容易让管理员混乱。 ● 在定时任务中,不管是直接写命令,还是在脚本中写命令,一定都是用绝对路径。 因为crontab的环境变量系统默认环境变量不完全一致。 4-4 [Linux]系统的crontab设置 系统的定时任务 ● “crontab -e”是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务。可是有些定时任务需要系统执行,这时我们就需要编辑/etc/crontab这个配置文件了。 CentOS 5 中的配置文件 ● vi /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin/:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /ec/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly CentOS 6 中的配置文件 ● vi /etc/crontb # 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 执行定时任务的方法 ● 手工执行定时任务 ● 系统定时任务 ● 第一种是把需要定时执行的脚本复制到 /etc/cron.{hourly,daily,monthly,weekly}目录中的任意一个 ● 第二种是修改/etc/crontab配置文件 4-5 [Linux]anacron配置及总结 anacron是什么 ● anacron是用来保证在系统关机的时候错过的定时任务,可以在系统开机之后再执行。 anacron检测周期 ● anacron会使用一天,七天,一个月作为检测周期。 ● 在系统的/var/spool/anacron/目录中存在cron.{daily,monthly,weekly}文件,用于记录上次执行cron的时间。 ● 和当前时间做比较,如果两个时间的差值超过了anacron的指定时间差值,证明有cron任务被漏执行。 CentOS 6.x的区别 ● 在老的CentOS版本中,/etc/cron.{hourly,daily,monthly,weekly}这些目录即会被cron调用,也会被anacron调用,容易重复执行。 ● 在CentOS 6.x中只会被anacron调用,避免了重复执行 ● 在CentOS 6.x中,anacron不再是服务,而是系统命令 anacron配置文件 ● vi /etc/anacrontab RANDOM_DELAY=45 #最大随机延迟 START_HOURS_RANGE=3-22 #anacron的执行时间范围是3:00-22:00 15cron.dailynice run-parts /etc/cron.daily 725cron.weeklynice run-parts /etc/cron.weekly @monthly 45cron.monthlynice run-parts /etc/cron.monthly #天数 强制延迟(分) 工作名称 时间执行的命令 cron.daily工作来说明执行过程 ● 首先读取/var/spool/anacron/cron.daily中的上一次anacron执行的时间 ● 和当前时间比较,如果两个时间的差值超过1天,就执行cron.daily工作 ● 执行这个工作只能在3:00-22:00之间 ● 执行工作时强制延迟时间为5分钟,再随机延迟0-45分钟时间 ● 使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件 ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:蒲公英的头发,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |