Linux 进程管理

一、 进程管理

1. 什么是进程

  进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的运行空间,并占有一定的系统资源。

2. 进程管理的作用

  • 判断服务器健康状态
  • 查看系统中所有进程
  • 杀死进程

3. 进程的查看ps命令

  • ps aux  查看系统中所有进程,使用BSD操作系统格式
  • ps -le 查看系统中所有进程,使用Linux标准命令格式
  • 选项
    • a:显示一个终端的所有进程,除了会话引线
    • u:显示进程的归属用户及内存使用情况
    • x:显示没有控制终端的进程
    • -l:长格式显示,显示更加详细的信息
    • -e:显示所有进程,和a作用一致
  • pstree [选项] 查看进程树
  • 选项

    • -p:显示进程的pid
    • -u:显示进程的所属用户
  • STAT:进程状态。常见的状态有:

    • R:运行
    • S:睡眠
    • T:停止状态
    • s:包含子进程
    • +:位于后台

4. 进程的查看top命令

  • top [选项] 查看系统健康状态
  • 选项

    • -d:秒数:指定top命令每隔几秒更新。默认是3秒
    • -b:使用批处理模式输出。一般和-n选项合用
    • -n:次数:指定top命令执行的次数
  • 在top命令的交互模式中可以执行的命令:

    • ?或h:显示交互模式的帮助
    • P:以CPU使用率排序,默认就是此项
    • M:以内存的使用率排序
    • N:以PID排序
    • q:退出top
  • 使用top查看所有进程
    1
    2
    // 将所有进程的情况输出到 top.log文本文档中
    top -b -n 1 > top.log

5. 杀死进程

  • kill命令 杀死单一进程

    • kill -l:查看可用的进程信号
    • kill -1 4399:重启进程
    • kill -9 4399:强制杀死进程
  • killall命令

    • killall [选项][进程]进程名:按照进程名杀死进程
    • 选项:
      • -i:交互式,询问是否要杀死某个进程
      • -I:忽略进程名的大小写
  • pkill命令
    • pkill [选项][进程]进程名:按照进程名终止进程
    • 选项:
      • -t:终端号:按照终端号剔除用户   //踢掉用户 pkill -9 -t pts/?

6. 进程优先级

  Linux 操作系统是一个多用户,多任务的操作系统,Linux 系统中同时运行着非常多的进程。但 CPU 在同一时钟周期内只能运算一个指令。进程优先级决定了每个进程处理的先后顺序。

注意
系统优先级:只有NI可以改,priority由两个值PRI,NI相加
nice:使用前必须先停止进程
renice:可以修正在运行的进程

  • nice命令

    • nice [选项] 命令:可以给新执行的命令直接赋NI值,但不能修改已经存在的进程的NI
    • 选项:
      • -n NI值:给命令赋予NI
    • 例如:
      • nice -n -5 service httpd start
  • renice命令

    • renice [优先级] PID:修改已经存在进程的NI值的命令
    • 例如:
      • renice -10 2125

修改NI值时有几个注意事项

  • NI 的值的范围是 -20~19
  • 普通用户调整 NI 的值的范围是 0~19,而且只能调整自己的进程
  • 普通用户只能调高 NI值,不能降低
  • root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程
  • PRI(最终值) = PRI(原始值)+ NI
  • 用户只能修改 NI 值,不能直接修改时 PRI
  • 数字越小,优先级越高

二、工作管理

  工作管理指的是在单个登录终端中(也就是登录的 shell 界面中)同时管理多个工作的行为

注意事项:

  • 当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作
  • 放入后台的命令必须可以持续运行一段时间,这样我们才能捕捉和操作这个工作
  • 放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行

1. 把进程放入后台

  • tar -zcf etc.tar.gz/etc &  #在命令后加入&,把命令放在后台执行
  • 按下ctrl + z快捷键,放在后台暂停

2. 查看后台的工作

  • jobs [-l]
  • 选项:

    • -l:显示工作的 PID
  • 注意:

    • + 代表最近一个放入后台的工作,也是工作回复时,默认恢复的工作
    • - 代表倒数第二个放入后台的工作

3. 将后台暂停的工作恢复到前台执行

  • fg %工作号 #恢复前台运行
  • bg %工作号 #恢复后台运行(不能有交互)

4. 后台命令脱离终端执行

把命令放入后台,只能在当前登录终端执行。一旦退出或关闭终端,后台程序就会停止

后台命令脱离登录终端执行的方法:

  • 把需要后台执行的命令加入 /etc/rc.local文件
  • 使用系统定时任务,让系统在指定的时间执行某个后台命令
  • 使用 nohup命令(常用)
    nohup 命令 &

三、系统资源查看

1. vmstat 命令监控系统资源

  • vmstat [刷新延时 刷新次数]
  • 例如:
    • vmstat 1 3

2. dmsg 开机时内核检测信息

  • dmesg
  • dmesg | grep CPU

3. free 命令查看内存使用状态

  • free [-b|-k|-m|-g]
  • 选项:
    • -b:以字节为单位显示
    • -k:以KB为单位显示,默认就是以KB为单位显示
    • -m:以MB为单位显示
    • -g:以GB为单位显示

4. 查看 cpu 信息

  • cat /proc/cpuinfo

5. uptime 命令

  • uptime
    • #显示系统的启动时间和平均负载,也就是top命令的第一行。w命令也可以看到这个数据

6. 查看系统与内核相关信息

  • uname [选项]
  • 选项:
    • -a:查看系统所有相关信息;
    • -r:查看内核版本;
    • -s:查看内核名称。

7. 列出进程打开或使用的文件信息

  • lsof [选项] #列出进程调用或打开的文件信息
  • 选项:
    • -c 字符串:只列出以字符串开头的进程打开的文件
    • -u 用户名:只列出某个用户的进程打开的文件
    • -p pid:列出某个PID进程打开的文件

缓冲和缓存的区别
缓存(cache ) 是用来加速数据从硬盘中读取的
缓冲(buffer)是用来加速数据写入硬盘的

查看当前Linux系统的发现版本
lsb_release -a

判断当前系统的位数
file /bin/ls

四、系统定时任务

1. at 一次执行

① 确定 at 安装
  • chkconfig --list | grep atd #at服务是否安装
  • service atd restart #at服务的启动
at的访问控制
  • 如果系统中有/etc/at.allow文件,那么只有写入/etc/at.allow文件(白名单)中的用户可以使用at命令(/etc/at.deny文件会被忽略)
  • 如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件,那么写入/etc/at.deny文件(黑名单)中的用户不能使用at命令(注意:对root用户不起作用)
  • 如果系统中这两个文件都不存在,那么只有root用户可以使用at命令
at命令
  • at [选项] 时间
  • m:当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户
  • c 工作号:显示该at工作的实际内容
  • 时间:
    • HH:MM
    • HH:MM YYYY-MM-DD
    • HH:MM[am|pm] [month][date]
    • HH:MM +[minutes|hours|days|weeks]
④ 例子

在两分钟之后执行hello.sh脚本
at now + 2 minutes
at> /root/hello.sh >> /root/hello.log

⑤ 其他at管理命令
  • atq #查询当前服务器上的at工作
  • atrm [工作号] #删除指定的at任务

2. crontab 循环定时

① crond 服务管理与访问控制
  • service crond restar
  • chkconfig crond on
② 用户的 crontab 设置
  • crontab [选项]
  • 选项:
    • -e:编辑crontab定时任务
    • -l:查询crontab任务
    • -r:删除当前用户所有的crontab任务
③ 常用命令
  • crontab -l #查看root用户的crontab任务
  • crontab -r #删除root用户所有的定时任务
  • crontab -e #添加crontab任务
④ crontab 注意事项
  • 六个选项不能为空
  • crontab定时任务最小有效时间为分钟,最大为月
  • 日期和星期最好不要同时出现
  • 执行任务写绝对路径

访问控制

  • 如果系统中有/etc/cron.allow文件(白名单),那么只有在此名单下的用户可以使用cron命令;
  • 如果系统中没有/etc/cron.allow文件,只有/etc/cron.deny文件(黑名单),那么在此名单下的用户不能使用cron命令【对root不起作用】
  • 如果系统这两个文件都不存在,那么只有root用户可以使用cron命令

crontab格式:

  • * * * * * 执行的任务
  • 第一个*:一小时当中的第几分钟,范围0-59
  • 第二个*:一天当中的第几小时,范围0-23
  • 第三个*:一个月当中的第几天,范围1-31
  • 第四个*:一年当中的第几月,范围1-12
  • 第五个*:一周当中的星期几,范围0-7(0和7都代表星期日)

crontab 举例:

  • 45 22 * 命令:在22点45分执行命令
  • 0 17 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号,以及每周一的0点0分都执行命令

3. 执行系统的定时任务的方法:

第一种:手工执行定时任务(crontab -e,默认当前用户)
第二种:系统定时任务

  1. 把需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个
  2. 修改/etc/crontab配置文件(必须指定用户)

Reference:
IMOOC-Linux系统管理

-------------本文结束感谢您的阅读-------------
Thank you for your encouragement