进程和计划任务管理

1. 程序

  • 程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。

  • 用于描述进程要完成的功能,是控制进程执行的指令集。

程序和进程的关系

  • 程序
    • 保存在硬盘、光盘等介质中的可执行代码和数据
    • 静态保存的代码
  • 进程
    • 在CPU及内存中运行的程序代码
    • 动态执行的代码
    • 父、子进程
      • 每个程序可以创建一个或多个进程

2. 进程

2.1 进程是什么?

运行中程序的副本,被载入内存的指令集合,资源分配的单位

  • 进程ID(Process ID,PID)号码被用来标记各个进程
  • 通常从执行进程的用户来继承
  • 存在生命周期
  • 由父进程创建

进程创建:

  • init:第一个进程,centos 7的进程为systemd
  • 进程:由父进程创建,有数据写入子进程需要新的内存空间




2.2 进程特征

  • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的

  • 并发性:任何进程都可以同其他进程一起并发执行

  • 独立性:进程是系统进行资源分配和调度的一个独立单位

  • 结构性:进程由程序数据进程控制块三部分组成

问题  如何查看一个程序是多线程还是单线程?

pstree

grep -i threads /proc/进程的PID/status

prtstat 进程PID号

2.3 进程状态

  • 创建状态:从硬盘拷贝到内存中的状态
  • 就绪状态:进程准备好,排队状态,等待分配到cpu处理
  • 执行状态:进程被调度后,进入执行状态
  • 阻塞状态:进程由于一些事件(如I/O请求)无法运行,进程受到阻塞
  • 终止状态:任务执行结束
进程更多状态:

运行态:running

就绪态:ready

睡眠态:可中断(interruptable)、不可中断(uninterruptable)

停止态:stopped,暂停于内存,只能手动启动

僵死态:zombie,僵尸态,结束进程,父进程不回收子进程

2.4 进程分类

进程类型

  • 守护进程:只要系统在就在,与终端无关
  • 前台进程:跟终端相关,通过终端启动

3. 查看进程信息

3.1 查看进程信息ps命令

  • ps命令(process state),可以查看进程当前状态的快照

    • 查看静态的进程统计信息
[root@localhost ~]#ps aux    #可以查看系统中所有的进程,当前状态,不会刷新

命令支持三种:长格式、短格式、unix风格

常用选项

a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
u:使用以用户为主的格式输出进程信息。
x:显示当前用户在所有终端下的进程信息。
-e:显示系统内的所有进程信息。   
-l:使用长(Long)格式显示进程信息。
-f:使用完整的(Full)格式显示进程信
k|--sort 属性 对属性排序,属性前加 - 表示倒序    ps aux k -%cpu
o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem

3.2 查看进程信息top命令

  • top命令
    • 查看动态的进程排名信息
[root@localhost ~]#top
top 即任务管理器  实时的
大部分系统信息都可以使用top来看

不建议在top中直接按k,想以什么排序就直接在top中按首字母
按小写l隐藏第一行
按数字1显示cpu
m命令进度条显示
选项
-d:秒数,指定top命令几秒更新一次,默认3秒
-b:使用批处理模式输出,一般和"-n"选项合用,用于把 top 命令重定向到文件中
-n:次数,用于指定 top 命令执行的次数。一般和"-"选项合用;
-p:进程PID:仅查看指定 ID 的进程
-s:使top命令在安全模式中运行,避免在交互模式中出现错误
-u:用户名:只监听某个用户的进程
问题

top的cpu在第几行?

第三行为 CPU 信息,具体内容如表

CPU 信息,具体内容如表

内 容 说 明
Cpu(s): 0.1 %us 用户模式占用的 CPU 百分比 个人用户开启的进程占用的 cpu 率
0.1%sy 系统模式占用的 CPU 百分比
0.0%ni 改变过优先级的用户进程占用的 CPU 百分比
99.7%id 空闲 CPU 占用的 CPU 百分比
0.1%wa 等待输入/输出的进程占用的 CPU 百分比 1
0.0%hi 硬中断请求服务占用的 CPU 百分比
0.1%si 软中断请求服务占用的 CPU 百分比
0.0%st st(steal time)意为虚拟程序占用 cpu 时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

3.3 查看进程信息pgrep命令

  • pgrep命令
    • 根据特定条件查询进程PID信息,过滤进程名,过滤出想要的信息
查看指定的进程

-U:指定用户
-l: 显示进程名
-a:显示完整格式的进程名
-P pid:显示指定进程的子进程
[root@localhost ~]#pgrep -l "log"  #-l显示进程名
410 xfs-log/dm-0
600 xfs-log/sda1
700 systemd-logind
701 rsyslogd
740 abrt-watch-log
741 abrt-watch-log

[root@localhost ~]#pgrep -l -U 特定用户 -t 指定终端  #-U指定特定用户  -t指定终端

3.4 命令进程树pstree命令

  • pstree命令
    • 以树形结构列出进程信息
常用选项
-a:显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p:显示PID
-T:不显示线程thread,默认显示线程
-u:显示用户切换
-H pid:高亮显示指定进程及其前辈进程
[root@localhost ~]#pstree -aup   #-a:显示完整信息	 -u:列出对应用户名	 -p:列出对应ID号

3.5 查看进程信息prtstat命令

prtstat 19204

4. 监控系统资源 虚拟资源vmstat

查看虚拟信息  磁盘io
iostat是真正看磁盘io的

vmstat 1:1秒刷新1次

5. free命令

  • free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
基本格式:
free [选项]
free -s 1:1秒刷新1次

常用选项:
-b:以bytes为单位来显示内存的信息
-k:以kb为单位来显示内存的信息
-m:以m为单位来显示内存的信息
-g:以G为单位来显示内存的信息
-h:以适于人类可读方式显示内存信息
-l:显示高低内存的利用率
-t:显示linux的全部内存
-s  N:表示每隔N秒打印一次内存信息,使用ctrl+c结束
-c  N:表示重复打印内存信息N次
-V:显示版本信息

  • total:内存总数
  • used:已使用内存数
  • free:空闲内存,可用内存多少
  • shared:多个进程共享的内存
  • buff/cache:块设备数据缓冲/文件内容的缓冲
  • available:真正剩余的可被程序应用的内存数

6.lsof

lsof(list opened files),列举系统中已经被打开的文件
lsof[选项]
操作系统五大性能:

1. 内存   用free top查看

2. 磁盘       

   剩余量           df、lsblk、fdisk -l         
   磁盘读写性能       dd、iostat、vmstat、iotop

3. cpu 使用率      

   top(实时) 

   ps(静态)

4. 网络:iftop

   系统版本:cat/etc/redhat-release

   ip地址:ifconfig

   内核版本:uname -r

5. kill -9

   killall

7 进程控制

7.1 进程的启动方式

  • 手工启动
    • 前台启动:用户输入命令,直接执行程序
    • 后台启动:在命令行尾加入"$"符号
  • 调度启动
    • 使用at命令,设置一次性计划任务
    • 使用crontab命令,设置周期性计划任务

7.2 进程的前后台调度

  • ctrl+Z组合键
    • 将当前进程挂起,即调入后台并停止执行
  • jobs命令
    • 查看处于后台的任务列表
  • fg命令
    • 将后台进程恢复到前台运行,可指定任务序号

7.3 终止进程的运行

  • ctrl+C
    • 中断正在执行的命令
  • kill、killall命令
    • kill用于终止指定PID号的进程
    • killall用于终止指定名称的所有进程
    • -9选项用于强制终止

8. 结束进程kill命令

格式
kill [信号] PID
kill发送信号

9. 进程使用内存的问题

内存泄露:Memory Leak

内存一直处于占用状态

内存溢出:Memory Overflow

程序申请了10M的空间,但这个空间写入了10M以上字节的数据

内存不足:OOM(Out Of Memory)

OOM使用解决方法
1.限制java进程的max heap,并且降低java程序的worker数量,从而降低内存使用
2.给系统增加swap空间

10. 计划任务管理

10.1 at命令

一次性计划任务

格式:
at [option] TIME
at [选项] 时间

不常用

10.2 crontab命令

10.2.1 crontab命令
  • 按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作
  • 属于周期性任务
  • 主要配置文件
    • 全局配置文件,位于文件/etc/crontab
    • 系统默认的设置,位于目录/etc/cron.*/
    • 用户定义的设置,位于文件/var/spool/cron/用户名

10.2.2 管理crontab计划任务
  • 编辑计划任务
    • crontab -e [u 用户名]
  • 查看计划任务
    • crontab -l [u 用户名]
  • 删除计划任务
    • crontab -r [u 用户名]
格式:
分钟	小时	日期	月份	星期

字段 说明
分钟 取值 0 - 59 任意整数
小时 取值 0 - 23 任意整数
日期 取值 1 - 31 任意整数
月份 取值 1 - 12 任意整数
星期 取值 0 - 7 任意整数
时间数值特殊表示方法:
* 代表范围内的任意时间
,表示间隔的多个不连续时间点
- 表示一个连续的时间范围
/ 指定间隔的时间频率

在书写 crontab 定时任务时,需要注意以下几个事项:

  • 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间
  • crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别
  • 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆
  • 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错
posted @ 2023-07-27 23:20  Candy独角兽  阅读(62)  评论(0)    收藏  举报