linux 进程和计划任务管理

232 阅读8分钟

进程和线程的基本区别

1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)

2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。 而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

ps查看静态进程信息

ps aux 静态查看进程信息(- 可以不加)

  1. a:显示终端上的进程,包括其他用户的进程
  2. u:表示列出进程的用户
  3. x:显示所有终端的进程
  • 终端(与计算机系统相连的一种输入输出设备) QQ截图20220808173624.png
  • USER:进程的用户
  • PID:进程的ID
  • %CPU:进程占用的CPU百分比
  • %MEM:占用内存的百分比
  • VSZ:该进程使用的虚拟内存量(KB)
  • RSS:该进程占用的物理内存量(KB)
  • TTY:启动进程的终端名
  • STAT:该进程的状态(D:不可中断的休眠状态 R:正在运行的状态 S:处于休眠状态,可被唤醒 T:停止状态,挂起装填 Z:僵死状态[子进程比父进程先结束,而父进程又没有回收子进程的机制] )
  • START:该进程被触发启动时间
  • TIME:该进程实际使用CPU运行时间
  • COMMAND:进程的启动命令

ps -elf 【ps -ef 显示常用的信息】

  1. -e:显示系统内的所有进程信息
  2. -l:使用长格式显示进程信息
  3. -f:使用完整的格式显示进行信息
  4. -a:显示所有进程pid
  5. -T:查看进程信息
  • ps-Ta 显示所有线程 QQ截图20220808175826.png QQ截图20220808175520.png
  • F:内核分配给进程的系统标记
  • S:进程的状态
  • ULD:启动这些进程的用户
  • PID:进程的进程ID
  • PPID:父进程的进程号(如果该进程是由另一个进程启动的)
  • C:进程生命周期中的CPU利用率
  • PRI:进程的优先级(越大的数字代表越低的优先级)
  • NI:谦让度值用来参与决定优先级
  • ADDR:进程的内存地址
  • SZ:假如进程被换出,如需要交换空间的大致大小
  • WCHAN:若该进程在休眠,则显示睡眠中的系统函数名
  • STLME:进程启动时的系统时间
  • TTY:进程启动时的终端设备
  • CMD:进程的启动命令

top动态查看进程

Linux系统自带的查看动态进程的命令(top)

load average: 0.00, 如果这个数字值≥CPU数量时 此时CPU使用率属于饱和状态【如果饱和率长时间达到70%-80%就应该注意】

top - 20:34:16 //当前的系统时间 
up 23:53,    //当前系统启动了多久
4 users,     //当前有多少用户登录系统
load average: 0.00,   //系统中CPU的使用率的饱和度  后面的数字代表 1分钟前  5分钟前   15分钟前 到现在的系统处理的任务数    后面的值和CPU的数量是一样的
查看CPU的方法 (lscpu     top按1)
Tasks: 201 total,   1 running, 200 sleeping,   0 stopped
%Cpu(s): //默认查看所有CPU
0.0 us,    //用户占用
0.0 sy,    //系统占用
0.0 ni,     //优先级调度占用
100.0 id,    //CPU空闲率
0.0 wa,   //(读写)占用情况
 0.0 hi,    //软中段
 0.0 si,   //虚拟化占用
KiB Mem :  2031912 total,    //当前所有的内存
109220 free,    //可以内存
746892 used,     //已经使用的内存
1175800 buff/cache   //内存和交换内存的缓冲区综合
KiB Swap:  4194300 total,  4180072 free,    14228 used.  1045016 avail M
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU 
 20608 root      20   0  157716   2280   1544 R   0.3 
     1 root      20   0  193700   5348   3276 S   0.0

QQ截图20220808210846.png

  • PID:进程id
  • USER:进程所有者的用户
  • PR:优先级
  • NI:谦让度值,负责表示高优先级,正值表示第优先级
  • VIRT:进程使用的虚拟内存总量,单位KB
  • RES:进程使用的物理内存大小:单位KB
  • SHR:共享内存大小,单位KB
  • S:进程状态
  • %CPU:上次更新到现在的CPU时间占用百分比
  • %MEM:进程使用的物理内存百分比
  • TIME+:进程使用的CPU时间总计,单位1/100秒
  • COMMAND:命令行/命令名

top快捷键

按键表达的意思
P根据CPU使用百分比大小排序
M根据驻留内存大小进行排序
N根据启动时间进行排序
c切换显示命令名称和完整命令
h可以获得top程序的在线帮助
K根据提示输入指定程序的PID好并按Enter 键终止对于的进程
q退出 top程序
1显示CPU个数和状态

top-H :显示所有线程

top-H -p :显示特定进程中的线程

atop是一款用于监控Linux系统资源与进程的工具,它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析,其比较强大的地方是其支持我们分析数据时进行排序、视图切换、正则匹配等处理。 本文记录了yum与源码包两种方式安装方式

安装atop
yum install epel-release
yum install -y atop   

pgrep 查看进程信息

pgrep -l 'log' 显示进程名

QQ截图20220808213657.png pgrep -l -U teacher -t tty2

-U:指定特定用户

-t:指定终端

pstree查看进程树

pstree -aup (加用户名)

  • -a:显示完整信息
  • -u:列出对应用户名
  • -p:列出对应PID号

控制进程

手动启动

前台启动:用户输入命令

后台运行:在命令尾部加上‘&’符号

调度启动

进程的前后台调度

Ctrl+z 将当前进程挂起  即调入后台并停止执行

Jobs  查看处于后台的任务列表  jobs [-l]

Fg  将后台进程恢复 加序号

QQ截图20220809161150.png

终止进程的运行

Ctrl+c 中断正在实行的命令

kill与killall命令

Kill  用于终止 指定 PID号的进程(可以准确的终止进程)

QQ截图20220809211847.png

killall用于终止指定名称相关的所有进程(可能会误杀到相关的进程,但是会清除的更干净一些)

-9 选项用于强行终止

kill默认传15代表的信号为SIGTERM,这是告诉进程你需要被关闭,请自动停止运行并退出,进程可以清除缓存自行结束,也可以拒绝结束

Kill-9代表的信号是SIGKILL,表示进程终止,需要立即退出,强制杀死改进程,这个信号不能被捕捉也不能被忽略。

在实际的工作之中建议使用Kill来杀进程,因为有的进程可能附带着一些重要的进程,Kill-9要谨慎使用,如果客户在使用这段进程就会导致很多不必要的麻烦

pkill命令

Pkill  -U 根据进程所属的用户名终止相应进程

Pkill  -t   指定终端

Pkill 【进程名】  根据进程名去杀

Pkill  -u 【用户】 -L 【终端】

QQ截图20220809214938.png

计划任务管理

一次性计划任务at命令

at 【时间:】【yyyy-mm-dd】编辑任务

使用crontab命令,设置周期性计划任务

Ctrl +D  提交任务
atq 查看未执行的任务列表
atrm +序号 删除任务列表

QQ截图20220809220348.png

QQ截图20220809220804.png

周期性任务crontab命令

(u缺少时默认是对当前用户)
编辑计划任务
crontab-e[-u用户名](u缺少时默认是对当前用户)
查看计划任务
crontab -l[-U 用户名]
删除计划任务
crontab -r[-u 用户名]
设置时间周期的顺序:    
分(分钟)  时(小时)  日(天)  月    周   命令或者脚本文件
时间数值的特殊表达方法:
*表示该范围内的任意时间
,表示间隔的多个不连续时间点
-表示一个连续的时间范围
/指定间隔的时间频率*/
举例理解:
0   10  *  *  1-2  周一到周二每天10:00
10  8   *  *  1,2,3  每周一,二,三的8:10分
0 2-10/2  *  *  *   2点到10点之间每2小时
0    *   */1  *  *  每1天

QQ截图20220809224618.png 主要设置文件:

全局配置文件,位于文件:/etc/crontab

系统默认的设置:位于目录:/etc/cron.*/

用户定义的设置:位于文件:/var/spool/cron/用户

总结

 查看进程的命【ps,top,pgrep,pstree】

进程控制:
  启动进程,调度进程,终止进程
at命令设置一次性计划任务
crontab命令设置周期性任务