Linux — 进程和计划任务管理

程序和进程的关系

◾ 程序

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

◾ 进程

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

1.进程、程序、线程

  • 程序:是保存在硬盘、光盘等介质中的可执行代码和数据,可以包含一个或者多个进程
  • 进程:在CPU及内存中运行的程序代码,动态执行的代码,而且进程可以包含一个或者多个线程,还可以包含一个或者多个子进程
  • 线程:执行操作的最小单元

2.进程的五种状态

  1. 运行状态(正在运行或在运行队列中等待)
  2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

查看进程信息ps(静态)

查看静态的进程统计信息

方法一:

[root@localhost ~]# ps aux
a:显示终端上的所有进程,包括其它用户的进程。
u:表示列出进程的用户。
x:显示所有终端的进程。

在这里插入图片描述

USER∶ 进程的用户。
PID∶进程的ID。
%CPU∶进程占用的CPU百分比。
%MEM∶ 占用内存的百分比。
VSZ∶该进程使用的虚拟内存量(KB)。
RSS∶ 该进程占用的物理内存量(KB)。
TTY∶ 启动进程的终端名。不是从终端启动的进程则显示为 ?
STAT∶该行程的状态
第一列:(第一状态是大写的)
D:不可中断
S:可中断
r:正常运行
z:僵死状态
T:停止运行
第二列:
<:高优先级(可获得cpu的分片更长)
+:当前进程运行在前台
N:低优先级
s:是控制进程
l:是多线程的
START∶该进程被触发启动时间。
TTME∶该进程实际使用CPU运行的时间。
COMMAND∶进程的启动命令。

方法二:

[root@localhost ~]# ps -<elf
●-e:显示系统内的所有进程信息。
●-l:使用长格式显示进程信息。
●-f:使用完整的格式显示进程信息。

在这里插入图片描述

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

查看进程信息top(动态)

每行对应的信息

在这里插入图片描述

top - 12:56:51 up 2:50, 2 users, load average: 0.00, 0.01, 0.05

#第一行是任务队列信息
12:56:51: 系统时间
up 2:50: 系统已运行时长
2 user: 当前登录用户数
load average: 0.00, 0.01, 0.05 :系统负载,即单位时间内系统处理的任务数,
后面三个数值分别为1分钟、5分钟、15分钟前到现在的平均值

Tasks: 223 total, 1 running, 222 sleeping, 0 stopped, 0 zombie

第二行为进程信息
Tasks :总进程数
running :正在运行的进程数
sleeping :休眠的进程数
stopped :中止的进程数
zombie :僵死的进程数

%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

第三行为CPU的信息
us :用户占用
sy :内核占用
ni :优先级调度占用
id :空闲CPU,要了解空闲的 CPU 百分比,主要看%id 部分
wa:I/O 等待占用
hi :硬件中断占用
si :软件中断占用
st :虚拟化占用

KiB Mem : 3861520 total, 1190856 free, 773196 used, 1897468 buff/cache

第四行为内存的信息
total:总内存空间
free :空闲内存
used:已用内存
buff/cache:物理内存和交换内存的缓冲区总和

KiB Swap: 4064252 total, 4064252 free, 0 used. 2730428 avail Mem

第五行为交换空间的信息
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程序的在线帮助信息
k 键根据提示输入指定进程的 PID 号并按 Enter 键终止对应的进程
q 键退出 top 程序
数字1 键显示CPU个数和状态

pgrep命令——查看进程信息

pgrep:根据特定条件查询进程PID信息
例:pgrep -l “log”
    pgrep -l -U teacher -t tty2
-l:显示进程名 缺省时只输出PID号
-U:指定特定用户
-t:指定终端

pstree命令——查看进程树

以树形结构列出进程信息
pstree -aup
-a:显示完整信息
-u:列出对应用户名
-p:列出对应PID号
例:pstree -ap teacher:只查看属于制定用户的进程树结构

在这里插入图片描述

进程的启动模式

1. 手工启动进程

前台启动∶ 用户输入命令,直接执行程序
后台启动∶在命令行尾加入"&"符号
[root@localhost~]#cp /dev/cdrom mycd.iso &
[1] 28454 (输出信息中包括后台任务序号、PID号)

2.调度启动

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

3.进程的前后台调度

①Ctrl+z组合键
将当前程序挂起,即调入后台并停止执行
②jobs命令
jobs 【-l】
查看处于后台的任务列表
③fg命令
将后台进程恢复到前台运行,可指定任务序号

4.终止进程的运行

当用户在前台执行某个进程时,可以按Ctrl+C组合键强制进行中断(如命令长时间没有响应的情况下)。中断前台进程的运行后,系统将返回到命令行提示符状态等待用户输入新的命令。当按Ctrl+C组合键无法终止程序或者需要结束在其他终端或后台运行的进程时,可以使用专用的进程终止工具kill、killall和pkill。

(1)使用kill命令终止进程
通过kill命令终止进程时,需要使用进程的PID号作为参数。无特定选项时,kill命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合“-9”选项强行终止进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不要轻易使用“-9”选项。例如,若SSH服务的sshd进程的PID号为2869,则执行“kill 2869”命令后可以将进程 sshd终止。

[root@localhost~]#pgrep-1"sshd"                 //查询目标进程的PID号
 2869 sshd
[root@localhost~]#kill 2869                     //终止指定PID的进程
[root@localhost ~]# pgrep -l "sshd"             //确认进程已终止(查询时无结果)

对于无法正常终止的系统进程,在必要时可以结合“-9”选项强制终止。例如,以下操作展示了强制终止vim进程的过程。

[root@localhost~]# vim tmpfile                   //打开vim程序并挂起作为测试
[1]+Stopped          vim tmpfile
[root@localhost~]#jobs-1                         //查询目标进程的PID号
[1]+2993 停止 vim tmpfile
[root@localhost~]#kill 2993                      //尝试正常结束进程
[root@localhost~]#jobs-1                         //但发现vim进程并未退出
[1]+2993 停止 vim tmpfile
[root@localhost~]# kill-9 2993                   //强制终止目标进程
[root@localhost~]#jobs-l                         //成功终止vim进程
[1]+2993 已杀死
 vim tmpfile

(2)使用killall命令终止进程
使用killall命令可以通过进程名来终止进程,当需要结束系统中多个相同名称的进程时,使用killall命令将更加方便,效率更高。killall命令同样也有“-9”选项。例如,执行“killall-9 vim”命令可将所有名为vim的进程都强行终止。

[root@localhost~]# vim testfile1                      //挂起第1个vim测试进程
[1]+ Stopped
 vim testfilel
[root@localhost~]# vim testfile2                      //挂起第2个vim测试进程
[2]+Stopped
 vim testfile2
[root@localhost~]#jobs-1                              //确认待终止的进程信息
[1]-3029停止
 vim testfilel
[2]+3030停止
 vim testfile2
[root@localhost~]#killall-9 vim                       //通过进程名终止多个进程
[1]-已杀死
 vim testfilel
[2]+已杀死 vim testfile2

(3)使用pkill命令终止进程
使用pkill命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与pgrep命令基本类似,如“-U”(指定用户)、“-t”(指定终端)等选项,使用起来非常方便。例如,若要终止由用户hackli启动的进程(包括登录Shell),可以执行以下操作。

[root@localhost~]#pgrep-1-U "hackli"                    //确认目标进程相关信息
 3045 bash
[root@localhost ~]# pkill-9-U "hackli"                  //强行终止用户hackli的进程
[root@localhost~]# pgrep-1-U "hackli"                   //确认目标进程已被终止

5.计划任务管理

1.at 一次性任务设置

at [HH:MM] [yyyy-mm-dd]
Ctrl+D 提交任务
atq 查看未执行的任务列表
atrm 1 删除第1条任务

例如,以下操作先通过date命令确认当前的系统时间,并设置在2016年5月5
日的14:55分自动执行以下任务:统计该时间点系统中由root用户运行的进程的数量,
并将该数值保存到“/tmp/ps.root”文件中。

[root@kgc~]# date
 2016年05月05日星期四 14:45:05 CST
[root@kgc~]# at 14:55 2016-05-05
 at>pgrep-U root|wc-1>/tmp/ps.root
 at><EOT>                           //任务设置完毕后按Ctrl+D组合键提交
 job 1 at 2016-05-05 14:55
[root@kgc~]#cat/tmp/ps.root       //等过了计划时间后验证命令结果
 63

以下操作将设置一条计划任务,在当天的21:30时自动关闭当前系统。

[root@kgc~]# at 21:30
 at>shutdown-h now
 at><EOT>
 job 2 at 2016-05-05 21:30

对于已经设置但还未执行(未到时间点)的计划任务,可以通过atq命令进行查询。
但已执行过的at任务将不会再出现在列表中。

[root@kgc~]#atq
 2    2016-05-05 21:30 a root

若要删除指定编号的at任务,可以使用atrm命令。删除后的at任务将不会被执行,
并且不会显示在atq命令的显示结果中。但已经执行过的任务无法删除。

[root@kgc~]#atrm 2         //删除第2条at计划任务
[root@kgc~]#atq            //确认第2条任务已被删除

2. crontab 周期性计划任务

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

其中全局配置文件内容看一下:/etc/crontab

[root@kgc ~]# cat /etc/crontab
 SHELL=/bin/bash                           //设置执行计划任务的Shell环境
 PATH=/sbin:/bin:/usr/sbin:/usr/bin        //定义可执行命令及程序的路径
 MAILTO=root                               //将任务输出信息发送到指定用户的邮箱
 HOME=/                                    //执行计划任务时使用的主目录
 # For details see man 4 crontabs
 # 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

常用选项

  • 编辑计划任务
    Crontab -e 【-u 用户名】-u缺省时默认是针对当前用户
  • 查看计划任务
    crontab -I【-u 用户名】
  • 删除计划任务
    crontab -r 【-u 用户名】

crontab任务配置的格式

在这里插入图片描述

在这里插入图片描述
◾ 时间数值的特殊表示方法

  • ***表示该范围内的任意时间
  • ,表示间隔的多个不连续时间点
  • -表示一个连续的时间范围
  • /指定间隔的时间频率

◾ 应用示例

0 17 * *1-5           周一到周五每天17:00
30 8 * *1,3,5         每周一、三、五的8点30分
0 8-18/2 * * *        8点到18点之间每2小时
0 * * /3 * *          每3天
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值