进程和计划任务管理

引言

程序:(比如公司)
保存在硬盘、光盘等介质可执行代码
静态保存的代码(二进制)

进程:(比如部门)
在CPU及内存中运行的过程
动态的代码(有生命周期和状态)
有父、子进程

线程:(比如员工)与进程:
资源分配与调度
进程是资源调配的基本单位
线程是程序执行的最小单位

一、查看进程

1.1程序和进程的关系

程序
1.保存在硬盘、关盘等介质中的可执行代码和数据
2.静态保存的代码
3.二进制的文件、静态的

进程
1.在CPU及内存中运行的程序代码
2.动态执行的代码
3.父、子进程( 每个程序可以创建一个或多个进程 )
4.是程序运行的过程,动态的 有生命周期及运行状态

线程
1.是操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程中的实际运作单位
2.一个进程至少有一个执行线程
3.线程也被称为轻量级进程
4.线程是进程内部的一部分

程序、进程、线程 的关系
线程包含在进程中,是进程中实际运作单位,也是操作系统中能够独立运行的基本单位,也称作轻量进程
一个进程中可以并发多个线程,每条线程可以并行执行不同任务,而我们在任务管理器中看到的一个个进程则由我们下载的应用程序所产生的
当然一个应用程序也可以包含多个进程

二、查看进程

2.1查看进程信息 ps

2.1.1 查看静态的进程统计信息

[root@localhost ~]# ps -aux    ###将以简单列表的形式显示出进程信

常用的参数:
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息
-u:使用以用户为主的格式输出进程信息
-x:显示当前用户在所有终端下的进程信息

在这里插入图片描述
常用的选项组合:
上述输出信息中,第一行为列表标题,其中各字段的含义描述如下
USER:启动该进程的用户账号的名称
PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的
%CPU:CPU 占用的百分比
%MEM:内存占用的百分比
VSZ:该进程使用的虚拟内存量(KB)
RSS:该进程占用的物理内存量(KB)
TTY:表明该进程在哪个终端上运行。不是从终端启动的进程则显示为?
简说:pts 是远程登录终端 ctrl+ALT F1-F6 tty1 图像界面 2 和 6 字符界面 ? 系统本身自身执行的进程
STAT:该进程的状态(D:不可中断的休眠状态:R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态: Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
D:系统守护进程
T:调式、程序执行一般停止
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (僵尸) 程序的状态D 不可中断状态

它们含意如下:
<: 表示进程运行在高优先级上
N: 表示进程运行在低优先级上
L: 表示进程有页面锁定在内存中
s: 表示进程是控制进程
l: 表示进程是多线程的
+: 表示当前进程运行在前台
D:系统守护进程
T 调式、程序执行一般停止
START:启动该进程的时间
TIME:该进程占用的 CPU 时间
COMMAND:启动该进程的命令的名称

[root@localhost ~]# ps -elf   ###将以长格式显示系统中的进程信息

常用的参数:
-e:显示系统内的所有进程信息
-1:使用长格式显示进程信息
-f:使用完整的格式显示进程信息

在这里插入图片描述
各列的解释:
F:内核分配给进程的系统标记。
S:进程的状态
UID:启动这些进程的用户
PID: 进程的进程ID
PPID:父进程的进程号(如果该进程是由另一“个进程启动的)
C:进程生命周期中的CPU利用率
PRI:进程的优先级(越大的数字代表越低的优先级)
NI: 谦让度值用来参与决定优先级
ADDR:进程的内存地址
SZ:假如进程被换出,所需交换空间的大致大小
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
STIME:进程启动时的系统时间
TTY:进程启动时的终端设备。 pts/0255 代表虚拟终端,一般是远程连接的终端; tty1 tty7 代表本地控制台终端
TIME:运行进程需要的累计CPU时间
CMD:进程的启动命令

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

2.1.2 查看进程动态信息

[root@localhost ~]# top  ###将以动态格式显示系统中的进程信息
top 命令全屏操作界面快捷键:
默认 3s 刷新一次,按 s 修改刷新时间   按空格 :立即刷新
P:按 CPU 排序
M:按内存排序
T: 按时间排序
p: 进程 IP,查看某个进程状态
N: 键根据启动时间进行排序
数字键 1:显示每个内核的 CPU 使用率u/U:指定显示的用户
h:可以获得 top 程序的在线帮助信息
q:键可以正常地退出 top 程序

在这里插入图片描述
上述输出信息中,开头的部分显示了系统任务(Tasks)、CPU占用、内存占用(Mem)、交换空间(Swap)等汇总信息,汇总信息下方依次显示当前进程的排名情况。相关信息的含义表述如下
uptime
13:22:30 当前时间
up 20days 系统运行时间 ,说明此服务器连续运行 20 天了
2 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。 三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值
系统任务(Tasks)信息:total,总进程数;running,正在运行的进程数;sleeping, 休眠的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数
CPU 占用信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;wa,I/O 等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。要了解空闲的 CPU 百分比,主要看%id 部分
内存占用(Mem)信息:total,总内存空间;free,空闲内存;used,已用内存;buff/cache,物理内存和交换内存的缓冲区总和。
交换空间(Swap)占用:total,总交换空间;free,空闲交换空间;used,已用交换空间;avail Mem,可用物理空间。

详细介绍:
Tasks: 481 total 进程总数
1 running 正在运行的进程数
480 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.0% us 系统用户进程使用 CPU 百分比
0.0% sy 内核中的进程占用 CPU 百分比 优先级调度占用
0.0% ni 用户进程空间内改变过优先级的进程占用CPU 百分比
98.7% id 空闲 CPU 百分比
0.0% wa CPU 等待 I/0 完成的时间总量

测试:
终端 1:执行:top
终端 2:dd if=/dev/zero of=/a.txt count=10 bs=100M
终端 3:dd if=/dev/zero of=/a.txt count=10 bs=100M
0.0% hi(了解) 硬中断消耗时间 硬件中断占用
硬中断,占的 CPU 百分比
0.0% si(了解) 软中断消耗时间 软件中断占用
软中断,占的 CPU 百分比
0.0 st (steal 偷) 虚拟化占用。要了解空闲的 CPU 百分比,主要看%id 部分

st:虚拟机偷取物理的时间
Mem: 3861516k total 物理内存总量
710488k used 使用的物理内存总量
1412956k free 空闲内存总量
1738072k buff/cache 用作内核缓存的内存量。和 free -k 一个意思
Swap: 3071996k total 交换区总量
0k used 使用的交换区总量
3071996k free 空闲交换区总量
2825600 avail Mem 总的可利用内存是多少

行进程信息:
PID 进程 id
USER 进程所有者的用户名
PR 优先级(由内核动态调整),用户不能
NI 进程优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以自己调整
VIRT(virtual memory usage) 虚拟内存,是进程正在使用的所有内存(ps 中标为 VSZ) VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请 100m 的内存,但实际只使用了 10m,那么它会增长
100m,而不是实际的使用量

RES(resident memory usage) 是进程所使用的物理内存。实际实用内存(ps 中标为 RSS) RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括 swap out
2、包含其他进程的共享
3、如果申请 100m 的内存,实际使用 10m,它只增长 10m,与 VIRT 相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR 共享内存大小,单位 kb SHR:shared memory 共享内存
1、除 M 了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out 后,它将会降下来

S 进程状态
D=不可中断的睡眠状态
R=运行中或可运行S=睡眠中
T=已跟踪/已停止Z=僵尸程序

%CPU 上次更新到现在的 CPU 时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的 CPU 时间总计,单位 1/100 秒
COMMAND 命令名/命令行

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

常用的参数
-l:选项可同时输出对应的进程名以及PID
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程

例1
pgrep -l "log"

例2
 pgrep -l -U teacher -t tty1

2.1.4 查看进程信息 pstree
以树形结构列出进程信息

pstree 命令默认情况下只显示各进程的名称

常用的参数:
-p:选项使用时可以同时列出对应的PID号
-u:选项可以列出对应的用户名
-a:选项可以列出完整的命令信息

执行如下的“pstree -aup”命令可以查看当前系统的进程树,
包括各进程对应的PID 号、用户名、完整命令等信息。
从输出结果中可以看出,systemd 进程确实是 Linux 操作系统中所有进程的“始祖”
 
例1
pstree -aup lu

三、控制进程

3.1 手工启动

由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否 需要占用当前的命令终端,手工启动又可以分为前台启动和后台启动。
前台启动:用户输入命令,直接执行程序。
后台启动:在命令行尾加入“&”符号

cp /dev/cdrom /home/cetos7.iso &

3.2 调度启动

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

3.3 进程的前后台调度

Ctrl+z组合键
将当前进程挂起,即调入后台并停止执行
jobs命令
查看处于后台的任务列表

常用的参数
-l:选项可以同时显示该进程对应的PID号

fg命令
将后台进程恢复到前台运行,可指定任务序号

使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作

使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行

除非后台中的任务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作为参数。

例如,执行如下的“fg 1”命令可以将之前挂起至后台的 wget 进程重新调入前台执行

[root@localhost ~]# jobs
[1]-   Stopped                 cp /dev/cdrom mycd.iso 
[2]+  Stopped                 top
[root@localhost ~]# fg 1

3.4 终止进程的运行

Ctrl+c 组合键

中断正在执行的命令

kill、killall 命令
kill用于终止指定PID号的进程。
killall用于终止指定名称的所有进程。
-9 选项用于强制终止
使用 kill 命令终止进程
[root@localhost ~]# pgrep -l "sshd"	 ###查询目标进程的PID 号
5822 sshd
[root@localhost ~]# kill 5822	###终止指定PID 的进程
[root@localhost ~]# pgrep -l "sshd"	###确认进程已终止(查询时无结果)

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

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

使用 killall 命令终止进程
[root@localhost ~]# vim testfile1 &	    ###挂起第 1 个 vim 测试进程
[1]+   Stopped	vim testfile1
[root@localhost ~]# vim testfile2 &	    ###挂起第 2 个 vim 测试进程
[2]+   Stopped	vim testfile2

[root@localhost ~]# jobs -l		  ###确认待终止的进程信息
[1]-   7144 Stopped	vim testfile1
[2]+   7153 Stopped	vim testfile2

[root@localhost ~]# killall -9 vim	###通过进程名终止多个进程
[root@localhost ~]# jobs -l
[1]-   7144 Killed	vim testfile1
[2]+   7153 Killed	vim testfile2

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

su - hmj
vim tst.txt &
[root@localhost ~]# pgrep –l -U "lu"	###确认目标进程相关信息3773 bash
[root@localhost ~]# pkill -9 -U "lu"	###强行终止用户hackli 的进程
[root@localhost ~]# pgrep -l -U "lu"	###确认目标进程已被终止

四、一次性任务设置

at 命令
一次性计划任务

at  [HH:MM](时间)  [yyyy-mm-dd](日期,年月日)

任务设置完毕后按Ctrl+D 组合键提交
示例
[root@kgc /]# date
2021年 08月 16日 星期一 16:20:58 +00
[root@kgc /]# at 16:23 2021-08-16
at> pgrep -U root | wc -l > /tmp/ps.root   ###统计该时间点系统中由 root 用户运行的进程的数量,并将该数值保存到/tmp/ps.root 文件中
at> <EOT>                                 ###任务设置完毕后按Ctrl+D 组合键提交
job 1 at Mon Aug 16 16:23:00 2021

[root@localhost ~]# cat /tmp/ps.root	###等过了计划时间后验证命令结果

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

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

五、crontab 周期性任务配置

使用 crontab 命令管理用户的计划任务,设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的选项可以完成不同的计划任务管理操作

常用的选项:

-e:编辑计划任务列表
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有root用户有权限使用此选项(用于编辑、删除其他用户的计划任务)
-l:列表显示计划任务
-r:删除计划任务列表

crontab 命令选项的使用

crontab -u 用户名   ###指定XX用户的cron服务
crontab -l         ###列出当前用户下的cron的详细内容
crontab -u zx -l   ###列出zx用户下的cron的详细内容
crontab -r         ###删除所有用户的cron内容,普通用户执行,只删除自己的cron内容
crontab -r -u zx   ###删除zx用户的cron内容
crontab -e         ###编辑cron服务

配置格式
在这里插入图片描述

事件数值的特殊表示方法

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

示例:
0 17 * * 1-5        周一到周五每天17:00、
30 8 * * 1,3,5      每周一、三、五的8点30分
0 8-18/2 * * *      8点到18点之间每2小时
0 * */3 * *         每3天

在这里插入图片描述

案例
[root@localhost ~]# crontab -e 
50 7 * * *  /usr/bin/systemctl start sshd.service   
50 22 * * * /usr/bin/systemctl stop sshd.servic    ###每天早上7:50自动开启 sshd 服务,22:50 关闭 sshd 服务
 0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/*    ###每隔五天清空一次 FTP 服务器公共目录/var/ftp/pub 中的数据   
 30 7 * * 6  /usr/bin/systemctl httpd restart     ###每周六的 7:30 重新启动系统中的 httpd 服务
 30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/    ###每周一、周三、周五的下午 17:30,使用 tar 命令自动备份/etc/httpd 目录,则可由 root 用户通过 crontab 设置以下计划任务

六、总结

1.查看进程的命令(ps、top、pgrep、pstree)

2.进程控制(启动进程、调度进程、终止进程)

3.at命令设置计划任务

4.crontab计划任务的配置字段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值