‘Linux’ 进程与计划任务管理

文章详细介绍了Linux系统中程序与进程的区别,以及如何通过ps、top、pgrep和pstree命令查看进程信息。此外,还讨论了进程的启动方式,包括前台后台调度,并介绍了at和crontab命令用于一次性及周期性计划任务的管理。重点讲述了crontab任务配置的格式和时间数值的特殊表示方法。
摘要由CSDN通过智能技术生成

一.程序和进程的关系

程序

  • 保存在硬盘,光盘等介质中的可执行代码和数据
  • 文件中静态保存的代码

进程:

  • 在cpu及内存中运行的程序代码
  • 动态执行的代码
  • 父,子进程
    • 每个程序可以创建一个或多个进程

例:提供Web服务的httpd程序,当有大量用户同时访问Web时,httpd程序可能会创建多个进程来提供服务。

二.查看进程

1.查看进程信息ps
ps命令:查看静态的进程统计信息

(1)【root@localhost ~】#ps -elf

 e:   //显示系统内的所有进程信息。
 l:   //使用长格式显示进程信息
 f:   //使用完整的格式显示进程信息
 a:   //显示现行终端下的所有进程
 T:   //查看线程信息

 ps -aT            //显示所有线程
 ps -T -p <pid>    //查看指定进程中已经起的线程
 ps -L <pid>       //查看指定进程中的线程信息
 ps aux --sort -%cpu | head -10    //按CPU降序排列,-为降序,+为升序,p与%同义
 ps aux --sort +pmem | head -n 10  //按内存升序排列
 ps aux --sort -pcpu,+pmem | head -n 10

F内核分配给进程的系统标记
S进程的状态
UID启动这些进程的用户
PID进程的进程ID
PPID父进程的进程号 (如果该进程是由另一个进程启动的)
C进程生命周期中的CPU利用率
PRI进程的优先级(越大的数字代表越低的优先级)
NI谦让度值用来参与决定优先级
ADDR进程的内存地址
SZ假如进程被换出,所需交换空间的大致大小
WCHAN若该进程在睡眠,则显示睡眠中的系统函数名
STIME进程启动时的系统时间
TTY进程启动时的终端设备
TIME运行进程需要的累计CPU时间
CMD进程的启动命令

(2)【root@localhost ~】#ps -aux

或 【root@localhost ~】#ps aux

 a:       //显示终端bai上的所有进程,包括其它用户的进程。
 u:       //表示列出进程的用户
 x:       //显示所有终端的进程。
USER进程的用户
PID进程的ID
%CPU进程占用的CPU百分比
%MEM占用内存的百分比
VSZ该进程使用的虚拟内存量 (KB)
RSS该进程占用的物理内存量 (KB)
TTY启动进程的终端名。不是从终端启动的进程则显示为?
STAT该行程的状态(D:不可中断的休眠状态,R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
START该进程被触发启动时间
TIME该进程实际使用CPU运行的时间
COMMAND进程的启动命令

僵尸进程
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程;如果是的化,就由Init来接管它,成为它的父进程,子进程退出Init会回收其占用的相关资源;
但是当子进程比父进程先结束,而父进程又没有回收子进程,释放了子进程占用的资源。此时子进程将成为一个僵尸进程。

2.查看进程信息top
top命令: 查看动态的进程排名信息

命令查看进程动态信息

<1> top - 16:16:46 up  7:46,  2 users,  load average: 0.00, 0.01, 0.05
<2> Tasks: 225 total,   1 running, 224 sleeping,   0 stopped,   0 zombie
<3> %Cpu(s):  0.1 us,  0.0 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
<4> KiB Mem :  8154928 total,  6527592 free,  1010952 used,   616384 buff/cache
<5> KiB Swap:  9211900 total,  9211900 free,        0 used.  6859600 avail Mem 

<1>第一行是任务队列信息

16:16:46系统时间
up 7:46系统已运行时长
2 users当前登录用户数
load average: 0.00, 0.01, 0.05系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟、5分钟、15分钟前到现在的平均值

<2>第二行为进程信息

Taske总进程数
running正在运行的进程数
sleeping休眠的进程数
stopped中止的进程数
zombie僵死的进程数

<3>第三行为CPU的信息

ususer time,表示 CPU 执行用户进程的时间,包括 nice 时间。通常都是希望用户空间CPU越高越好。
sysystem time,表示 CPU 在内核运行的时间,包括IRO和softirg。系统 CPU占用越高,表明系统某部分存在瓶颈。通常这个值越低越好。
ninice time,具有优先级的用户进程执行时占用的 CPU 利用率百分比
ididle time,表示系统处于空闲期,等待进程运行。
wa: waiting time,表示 CPU 在等待IO操作完成所花费的时间。系统不应该花费大量的时间来等待IO 操作,否则就说明 IO存在瓶颈。
hihard IRO time,表示系统处理硬中新所花费的时间。
sisoft IRO time,表示系统处理软中断所花费的时间
ststealtime,被强制等待

<4>第四行为内存的信息

total总内存空间
free空闲内存
used已用内存
buff/cache物理内存和交换的缓存区总和

<5>第五行为交换空间的信息

total总交换空间
free空闲交换空间
used已用交换空间
avail Mem可用物理空间
进程信息区各列解释:
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程序的在线帮助信息
l 键:       //显示CPU个数
k 键:       //根据提示输入指定进程的 PID 号并按 Enter 键终止对应的进程
q 键:       //退出 top 程序
数字1键:    //显示cpu个数和状态

top   -H:            //显示所有线程
top   -H -P<pid>:    //显示特定进程中的线程
3.查看进程信息pgrep
pgrep命令:根据特定条件查询进程PID信息

根据特定条件查询进程PID信息

  • -l:显示进程名,缺省时只输出PID号
  • -U:指定特定用户
  • -t:指定终端
【root#localhost~】# pgrep -l “log”     -l:显示进程名   缺省时只输出PID号
【root#localhost~】#pgrep -l -U teacher -t tty2         -U:指定特定用户     -t:指定终端
4.查看进程数pstree
pstree命令:以树形结构列出进程信息

pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁。
几个重要的参数:

  • -A: 各进程树之间的连接以ASCII码字符来连接
  • -U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误
  • -p:同时列出每个进程的PID
  • -u: 同时列出每个进程的所属账号名称
【root#localhost~】#pstree -aup (用户名)    //-a:显示完整信息    -u:列出对应用户名    -p:列出对应PID号

【root#localhost~】#pstree  -ap teacher    //只查看属于指定用户的进程树结构

三.控制进程

1.进程的启动方式

手动启动:

  • 前台启动:用户输入命令,之间执行程序
  • 后台启动:在命令行尾加入“&”符号
【root#localhost~】#cp  /dev/cdrom  mycd.iso  &      //输出信息中包括后台任务序号,PID号

调度启动:

  • 使用at命令,设置一次性计划任务

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

2.进程的前后台调度
Ctrl+Z组合键:
  • 将当前进程挂起,即调入后台并停止执行
jobs命令:
  • jobs【-l】
  • 查看处于后台的任务列表
fg命令:
  • 将后台进程恢复到前台运行。可指定任务序号`
【root#localhost~】#jobs
【root#localhost~】#fg   1
3.指定进程得运行
Ctrl+C组合键:
  • 中断正在执行的命令
kill,killall命令:

kill用于终止指定PID号的进程
killall用于终止指定名称相关的所有进程
-9选项用于强制终止(强制终止进程可能会导致程序运行的部分数据丢失,因此不得以时不要轻易使用“-9”选项)

  • 我们经常会用到kill命令去杀死一个进程,但是有时候会出现kill不成功的现象,这时就要用到kill -9
  • 之所以这两个命令会有区别是因为所发送的信号(Signal)是不同的:
    默认情况下kill命令的参数为-15,如下图所示:
    在这里插入图片描述
    kill -15代表的信号为SIGTERM,这是告诉你进程需要被关闭,请自行停止运行并退出;而kill -9代表的信号是SIGKILL,表示进程被终止,需要立即退出
  • 因此kill -9表示强制杀死该进程,这个信号不能被捕获也不能被忽略
pkill命令:

根据特定条件终止相应的进程
常用命令选项:

-u:<用户名>根据进程所属的用户名终止相应进程
-t:<中端>根据进程所在的终端终止相应进程
【root#localhost~】#pgrep   -l   -u  ‘teacher’
【root#localhost~】#pkill   -9   -U ‘teacher’ 
【root#localhost~】#pgrep   -l   -U ’teacher‘

四.计划任务管理

1.at命令:一次性计划任务
at  【HH:MM】  [yyy-mmm-dd]   -------->ctrl+d   ------->atq
  • 使用at命令设置的任务只在指定时间点执行一次,若只指定时间
  • 则表示当天的该时间,若只指定日期则表示该日期的当前时间
    可以在at交互环境中输入多条命令,最后按Ctrl + D组合键提交
    案例:
    (1):今天的20:23时自动关闭当前系统
[root@localhost ~]# at 20:23          //不携带日期表示当日
at> shutdown -h now                   //自动关闭系统
at> <EOT>                             //按Ctrl+D键提交任务
job 4 at Tue Apr 11 20:23:00 2023

[root@localhost ~]# atq               //查看未执行的任务列表
4	Tue Apr 11 20:23:00 2023 a root

[root@localhost ~]# atrm 4            //删除第4条任务

2.crontab命令
  • 按照预先设置的时间周期 (分钟、小时、天、月、周)重复执行用户指定的命令操作
  • 属于周期性计划任务
  • 主要设置文件
    • 全局配置文件,位于文件: /etc/crontab
    • 系统默认的设置,位于目录: /etc/cron.*/
    • 用户定义的设置,位于文件: /ar/spool/cron/用户名
编辑计划任务:
crontab -e [-u 用户名]      //-u缺省时默认是针对当前用户
查看计划任务   
crontab I [-u 用户名] 
删除计划任务   
crontab -r [-u 用户名1 

五.crontab周期性任务设置

1.crontab任务配置的格式

在这里插入图片描述

  • 前面5个字段用于指定任务重复执行的时间规律,第6个字段用于指定具体的任务内容
  • crontab任务配置记录中,所设置的命令在“分钟+小时+日期+月份+星期”都满足的条件下才会运行
字段
说明
分钟取值为从0到59之间的任意整数
小时取值为从0到23之间的意整数
日期取值为从1到31之间的任意整数
月份取值为从1到12之间的任意整数
星期取值为从0到7之间的任意整数,0或7代表星期日
命令要执行的命令或程序脚本
2.时间数值的特殊表示方法
  • *表示该范围内的任意时间
  • ,表示间隔的多个不连续时间点
  • – 表示一个连续的时间范围
  • / 指定间隔的时间频率
    应用示例:
0   17  *  *  1-5            //周一到周五每天17:00
30   8  *  *  1,3,5          //每周一、三、五的8点30分
0   8  -18/2  *  *  *        //8点到18点之间每2小时
0   *  *  /3  *  *           //每3天

示例
crontab -e [-u root]

  • 1.每分钟定时执行一次规则:
每1分钟执行:*/1  *   *   *   **   *   *   *   *
每5分钟执行:*/5   *   *   *  *
  • 2.每小时定时执行一次规则:
每小时执行:0  *  *  *  *或者0  */l  *  *  *
每天上午7点执行:0  7  *  *  * 
每天上午7点10分执行:10  7 *  *  *
  • 3.每天定时执行一次规则:
每天执行0  0  *  *  * 
  • 4.每周定时执行一次规则:
每周执行0  0  *  *  1
  • 5.每月定时执行一次规则:
每月执行0  0  1  *  *
  • 6.每年定时执行一次规则:
每年执行 0  0  1  1  *
  • 7.其他例子:
5  *  *  *  *  ls       指定每小时的第5分钟执行一次ls命今
30   5  *  *  *  ls     指定每天的 5:30 执行ls命令
30  7  8  *  * ls       指定每月8号的7: 30分执行ls命令
30  5  8  6  *  ls      指定每年的6月8日5: 30执行ls命令
30  3  10, 20 * * 1s    每月10号及20号的3: 30执行1s命令【注:","用来连接多个不连续的时段】
25 8-11 * * * ls        每天8-11点的第25分钟执行1s命令【注:“_"用来连接连续的时段】
*/15  *  *  *  * 1s     每15分钟执行一次1s命今【即每个小时的第0 15 30 45 60分钟执行1s命令】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wanghwei 17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值