IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux--进程与任务管理 -> 正文阅读

[系统运维]Linux--进程与任务管理

前言

Linux进程管理是一项十分重要的工作,可以帮助我们更好的控制系统。进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。本文介绍了常用进程操作命令以及管理

一、查看进程

  • 程序:

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

    • 静态保存的代码

  • 进程:

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

线程和进程的区别:

做个简单的比喻:进程=火车,线程=车厢
线程在进程下行进(单纯的车厢无法运行),一个进程可以包含多个线程(一辆火车可以有多个车厢),多个线程可共享数据(车厢是互通的)

1、查看进程信息——ps

①方法一——ps -aux

  • 查看静态的进程统计信息:ps -aux

一般结合管道符号来用:ps -aux | grep httpd | wc -l

  • a:显示当前终端下的所有进程信息,包括其他用户的进程,与“x”选项结合使用时将显示系统中所有的进程信息
  • u:使用以用户为主的格式输出进程信息
  • x:显示当前用户在所有终端下的进程信息
  • 将以简单列表的形式显示出进程信息
示例:
[root@localhost ~]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  2.6  0.3  46344  6908 ?        Ss   16:47   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    16:47   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    16:47   0:00 [kworker/0:0]
root          4  0.0  0.0      0     0 ?        S<   16:47   0:00 [kworker/0:0H]
##省略...
名词解释
USER进程的用户
PID进程的ID
%CPU进程占用的CPU百分比
%MEN占用内存的百分比
VSZ该进程使用的虚拟内存量(KB)
RSS该进程使用的物理内存量(KB)
TTY启动该进程的终端名;若不是从终端启动的进程则显示为“?”
STAT该进程的状态(D:不可中断的休眠状态:R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态: Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
START该进程被触发启动时间
TIME该进程实际使用CPU运行的时间
COMMAND进程的启动命令

名词解释(僵尸进程):
已经结束了一个进程,但是它任然还占用着内存,也称之为僵死

父进程退出,子进程没有退出,那这些子进程就没有父进程去管理它们,所以就成了僵尸进程

状态后缀表示:

-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
-C:进程占用CPU的百分比

  • 示例1:查看进程状态

mark

ctrl+c :发送 SIGINT 信号,终止一个进程
ctrl+z :发送 SIGSTOP 信号,挂起一个进程。将作业放置到后台(暂停)
ctrl+d :不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销

  • 示例2:不可中断状态
tar -zcvf usr-tar.gz /usr/
#然后在另一个终端不断查看状态,由 S+,R+变为 D+

②方法一——ps -elf

  • e:显示系统内的所有进程信息
  • l:使用长格式显示进程信息
  • f:使用完整的格式显示进程信息
  • 将以长格式显示系统中的进程信息,并且包含更丰富的内容
示例:
[root@localhost ~]# ps -elf
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 32068 ep_pol 16:47 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root          2      0  0  80   0 -     0 kthrea 16:47 ?        00:00:00 [kthreadd]
1 S root          4      2  0  60 -20 -     0 worker 16:47 ?        00:00:00 [kworker/0:0H]
1 S root          5      2  0  80   0 -     0 worker 16:47 ?        00:00:00 [kworker/u256:0]
##省略...
名词解释
F内核分配给进程的系统标记
S进程的状态
UID启动这些进程的用户
PID进程的进程ID
PPID父进程的进程号(如果该进程是由另一个进程启动的)
C进程生命周期中的CPU利用率
PRI进程的优先级(越大的数字代表越低的优先级)
NI谦让度值用来参与决定优先级
ADDR进程的内存地址
SZ假如进程被换出,所需交换空间的大致大小
WCHAN若该进程在睡眠,则显示睡眠中的系统函数名
STIME进程启动时的系统时间
TTY进程启动时的终端设备
TIME运行进程需要的累计CPU时间
CMD进程的启动命令

在CentOs7系统,tty1表示图形界面,tty2-tty6表示文字界面,可以用Ctrl+Alt+(F1-F6)切换

2、查看进程信息——top

  • 使用ps命令查看到的是一个静态的进程信息,并不能连续地反馈当前进程的运行状态
  • 若希望以动态刷新的方式显示各进程的状态信息则使用top
  • 默认情况下每三秒刷新一次,按 s 修改刷新时间,按空格 :立即刷新

mark

①系统任务(第一行)和进程(第二行)的信息

相关信息含义相关信息含义
18:55:08系统时间Tasks总进程数
up 2:07系统已运行时间running正在运行的进程数
1 user当前登录用户数sleeping休眠的进程数
load average:0.00,0.01,0.05系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟、5分钟、15分钟到现在的平均值stopped中止的进程数
//zombie僵死的进程数

②CPU(第三行)、内存(第四行)的信息和交换空间(第五行)的相关信息

相关信息含义相关信息含义相关信息含义
us用户占用total总内存空间total总交换空间
sy内核占用free空闲内存free空闲交换空间
ni优先级调度占用used已用内存used已用交换空间
id空闲CPU,要了解空闲的CPU百分比,主要看%id部分buff/cahe物理内存和交换内存的缓冲区总和avail Mem可用物理空间
waI/O等待占用////
hi硬件中断占用////
si软件中断占用////
st虚拟化占用////

③ 进程信息区各列详解

信息解释
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 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息,然后按Enter 键确认即可终止对应的进程

3、查看进程信息——pgrep

-l选项可同时输出对应的进程名以及PID
-U选项查询特定用户的进程
-t选项查询在特定终端运行的进程
  • 示例1:查询进程中包含‘log’的进程及PID号(若没有“-l”则只输出PID号)
[root@localhost ~]# pgrep -l "log"
288 xfs-log/sda2
477 xfs-log/sda1
481 xfs-log/sda5
595 systemd-logind
601 abrt-watch-log
628 abrt-watch-log
1028 rsyslogd
  • 示例2:查询由用户 teacher 在 tty1 终端上运行的进程及PID号
[root@localhost ~]# pgrep -l -U teacher -t tty1

4、查看进程树——pstree

  • pstree命令可以输出Linux系统中各进程的树形结构,更加直观地判断出各进程之间的相互关系(如父、子进程)
-p选项使用时可以同时列出对应的PID号
-u选项可以列出对应的用户名
-a选项可以列出完整的命令信息
  • 示例1:
pstree -aup   #查看当前系统的进程树,包括各进程对应的PID 号、用户名、完整命令等信息。从输出结果中可以看出,systemd 进程确实是 Linux 操作系统中所有进程的“始祖”

二、控制进程

1、进程的启动方式

  • 在Linux系统中,可以由用户手工启动或者按预定计划调度启动新的进程

①手工启动

  • 根据该进程是否需要占用当前命令终端,手工启动分为以下两类

    • 前台启动:用户输入命令,直接执行程序,但得等到该进程结束并退出才能继续执行其他命令
    • 后台启动:在命令行尾加入“&”符号;无需等待,适用于等待时间较长的操作
  • 示例:

[root@localhost ~]# cp /dev/cdrom mycd.iso &
[1] 4226
##输出信息包括后台任务序号和PID号

②调动启用

  • 在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如半夜)进行,但这样需要用户进行事前调度安排并指定任务运行的时间
  • 调度启动的计划任务进程均在后台进行,不占用用户的命令终端
  • 使用”at“命令时,设置一次性计划任务,使用”crontab"命令,设置周期性计划任务

2、进程的前后台调度

①挂起当前进程

当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,打包usr并且调入后台 ,可以按 Ctrl+Z 组合键将该下载任务调入后台并暂停执行—tar zcvf usr.tar.gz /usr

②查看后台的进程

  • jobs—查看当前终端中在后台运行的进程任务,结合“-l”选项可以同时显示该进程的PID号

③将后台的进程恢复运行

  • bg; 将后台暂停执行的任务恢复运行并继续在后台执行
  • fg:将后台暂停执行的任务恢复运行并恢复至前台运行
  • 除非后台中的任务只有一个,否则bg和fg命令都需要指定后台进程的任务编号作为参数
  • 例如:“fg 1(任务编号)”

3、终止进程执行

  • 当用户在前台执行某个进程时,可以用Ctrl+C组合键强制中断当前正在执行的命令
  • 当按 Ctrl+C 组合键无法终止程序或者需要结束在其他终端或后台运行的进程时, 可以使用专用的进程终止工具 kill、killall 和 pkill

①kill

  • kill用于终止指定PID号的进程,需要使用进程的PID号作为参数
  • 若该进程不响应终止信号,则结合“-9”选项可以强制终止

mark

mark

②killall

  • 使用 killall 命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用 killall 命令将更加方便,效率更高。killall 命令同样也有“-9”选项。

  • 例如,执行如下的“killall -9 vim”命令可将所有名为 vim 的进程都强行终止

    ——通过进程名终止多个进程

mark

③pkill

  • 根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程
  • 与“pgrep”命令选项类似,如“-U(指定用户名)”、“-t(指定终端)”
 pgrep –l -U "xjj"         #确认目标进程相关信息
 pkill -9 -U "xjj"         #强行终止用户xjj的进程
 pgrep -l -U "xjj"	       #确认目标进程已被终止

三、一次性计划任务—at

  • 在 Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。CentOS 系统中默认已安装了 at、cronie 软件包

  • 设置一次性计划时,在at命令中依次指定计划执行任务的时间、日期作为参数

  • 确认后进入带“at>”提示符的任务编辑器界面,每行设置一条执行命令,可以依次设置多条语句,最后按Ctrl+D组合键提交任务

  • 注:计划执行任务的时间、日期必须安排在当前系统时间之后

  • 对应条件:对应系统服务为atd,必须已经运行

mark

  • “atq”命令可以进行查询,对于已经设置但还未执行(未到时间点)的计划任务,但已执行过的不会再出现在列表中
  • "atrm"命令可以删除指定编号的at任务

mark

四、周期性任务设置—crontab

  • 使用crontab命令设置的计划任务可以按预设的周期重复执行,可以大大减轻设置重复性系统管理任务的操作

  • 由软件包cronie提供crontab工具、系统服务crond和配置文件/etc/crontab

  • 前提条件:对应的系统服务crond必须已经运行

1、配置文件和目录

  • crond 通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置

①系统任务配置文件,位于文件:/etc/crontab

  • 设置的是维护Linux系统所需的任务,由Linux系统及相关程序在安装时自动设置,不建议用户修改
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash	                      #设置执行计划任务的Shell 环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin	  #定义可执行命令及程序的路径
MAILTO=root	                          #将任务输出信息发送到指定用户的邮箱

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

  • 软件包crontabs安装后,会在此目录下升恒一些系统默认设置的计划任务目录,设置了系统每个小时、每一天做些什么工作

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

  • 由用户使用crontab命令设置的cron计划会被保存在此目录中(会在此目录中生成一个与用户名相同的文件)

crond 守护进程会自动检查/etc/crontab 文件、/etc/cron.d/目录及 /var/spool/cron/目录中的改变,如果发现有配置更改,它们就会被载入内存,所以当某个 crontab 文件改变后并不需要重新启动 crond 守护进程就可以使设置生效

2、管理crontab计划任务

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

3、crontab 任务配置的格式

字段说明
分钟取值为从0到59之间的任意整数
小时取值为从0到23之间的任意整数
日期取值为从1到31之间的任意整数
月份取值为从1到12之间的任意整数
星期取值为从0到7之间的任意整数,0或7代表星期日
命令要执行的命令或程序脚本

背记口诀(牢记):分 时 日 月 周

4、时间数值的特殊表示方法

①特殊表示方式及示例

  • “*”表示该范围内的任意时间

  • “,”表示一个间隔内的多个不连续时间点

  • “-”表示一个连续的时间范围

  • “/”表示间隔的时间频率

    示例1:

若要按固定的周期重复完成一些系统管理任务,任务内容如下:①每天早上 7:50
自动开启httpd 服务,22:50 关闭 httpd 服务;②每隔五天清空一次 FTP 服务器公共目录/var/ftp/pub 中的数据;③每周六的 7:30 重新启动系统中的 httpd 服务;④每周一、周三、周五的下午 17:30,使用 tar 命令自动备份/etc/httpd 目录,则可由 root 用户通过 crontab 设置以下计划任务

[root@localhost ~]# crontab -e
50 7 * * * /usr/bin/systemctl start httpd.service 
50 22 * * * /usr/bin/systemctl stop httpd.servic 
0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /usr/bin/systemctl httpd restart
30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
*/2 * * * * ls -lh /home/*
  • 因为执行任务时不需要用户登录,建议都使用绝对路径,避免因缺少执行路径而无法执行命令的情况

  • 在设置每分都执行的任务时,“分钟”字段也应填写一个具体的时间数值,而不是默认的“*”,否则将会每分钟执行一次任务

    示例2:

普通用户执行“crontab -e”命令时,可以设置自己的计划任务(需要注意命令的执行权限)。
例如,用户xjj 设置一条计划任务:在每周五晚上的 23:55 将/etc/passwd 文件的内容复制到宿主目录中,保存为 123.txt 文件,具体操作如下:

[xjj @localhost ~]# crontab -e
55 23 * * 5 /usr/bin/cp /etc/passwd /home/xjj/123.txt

②查看用户的计划任务表

crontab 命令结合“-l”选项可以查看当前用户的计划任务列表,对于 root 用户来说,还可以结合“-u”选项查看其他用户的计划任务,具体操作如下:

[root@localhost ~]# crontab –l	                #查看用户root 自己的计划任务
50 7 * * * /usr/bin/systemctl start httpd.service
50 22 * * * /usr/bin/systemctl stop httpd.servic 
0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /usr/bin/systemctl httpd restart
30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
[root@localhost ~]# crontab -l -u xjj            #查看用户xjj的计划任务
55 23 * * 7 /usr/bin/cp /etc/passwd /home/xjj/123.txt 
[root@localhost ~]# ll /var/spool/cron/xjj
-rw-------. 1 root root 57 May 7 11:10 /var/spool/cron/xjj

③删除用户的计划任务表

  • 当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清空某个用户的所有计划任务,可以执行“crontab -r”命令
[xjj@localhost ~]$ crontab -r	 #用户xjj清空自己设置的计划任务
[xjj@localhost ~]$ crontab -l
no crontab for xjj

总结

在生产环境中设置相应的计划任务可以按预设的周期重复执行,可以大大减轻设置重复性系统管理任务的操作

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 13:05:48  更:2021-08-18 13:07:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 19:12:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计