目录
管理进程任务
1. 监视查看进程
1.1 ps命令
格式: ps [选项]
作用:显示进程的状态。没有选项的时候显示当前用户在当前终端启动的进程。
选项:*高亮的为常用选项
a | 显示所有进程 |
u | 指定用户的所有进程 |
x | 显示当前用户在所有终端下的进程信息 |
c | 显示进程的真实名称k|--sort 属性 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu |
e | 显示环境变量 |
f | 显示程序间的关系 |
r | 显示当前中断的进程 |
T | 显示当前终端的所有进程 |
-e | 显示系统内所有的进程信息,等同于-A |
-f | 使用完整的格式显示进程信息 |
-l | 将目前属于用户自己这次登入的PID与相关信息列示出来,使用长格式显示 |
-o | pid,ppid,pgrp,tpgid,cmd、%cpu、%mem... 选项显示定制的信息,输出指定的字段 |
-H | 显示树状结构 |
-a | 显示统一终端下的所有程序 |
-N | 反向选择 |
k|--sort | 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu |
ps aux命令输出格式的各字段详解:
选项 | 功能 |
USER | 行程拥有者,该进程是由哪个用户产生的 |
PID | pid,进程的 ID |
%CPU | CPU使用率 |
%MEM | 内存使用率 |
VSZ | 占用的虚拟内存的大小 |
RSS | 占用实际物理内存的大小 |
TTY | 终端的次设备号,该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。?代表和终端无关,系统进程 |
START | 进程的状态如下: D:不可中断的静止,通常用于 I/O 情况。 R:正在执行中 S:静止状态,可以被唤醒 T:暂停执行 Z:僵尸状态 W:没有足够的内存分页可分配,内存交互状态 X:死掉的进程(应该不会出现) <:高优先序的行程 N:低优先序的行程 L:有记忆体分页分配并锁在内存内 s:包含子进程 l:多线程(小写 L) +:位于后台。 |
START | 进程开始的时间 |
TIME | 执行的时间,该进程占用 CPU 的运算时间,注意不是系统时间 |
COMMAND | 所执行的命令 |
ps -elf命令输出格式的各字段详解:
选项 | 功能 |
F | 进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限 |
S | 进程状态。具体的状态和"psaux"命令中的 STAT 状态一致 |
UID | 运行此进程的用户的 ID |
PID | 进程的 ID |
PPID | 父进程的 ID |
C | 该进程的 CPU 使用率,单位是百分比 |
PRI | 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改 |
NI | 进程的优先级,数值越小,该进程越早被执行;可以人为修改 |
ADDR | 该进程在内存的哪个位置 |
SZ | 该进程占用多大内存 |
WCHAN | 该进程是否运行。"-"代表正在运行 |
TTY | 该进程由哪个终端产生 |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间 |
CMD | 产生此进程的命令名 |
部分相关选项所拓展的综合命令:
1)与grep组合用法,查找特定的进程
2)列出类似程序树的程序显示
3)找出与cron与syslog这两个服务有关的PID
4)如果不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那只需使用 "ps -l" 命令
拓展:
prtstat命令
作用:查看进程信息
1.2 pstree命令
格式:pstree [选项]
作用:以树状的方式表项进程的父子关系。清楚的表达进程间的相互关系。如果指定用户名称,会以隶属于该用户的第一个进程作为根然后显示该用户的所有进程;如果不指定,则会把系统启动时的第一个进程视为根,并显示之后的所有进程。不加选项,默认只显示各进程的名称。
主要选项:*高亮的为常用选项
-a | 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示 |
-c | 不使用精简标示法 |
-G | 使用VT100终端机的列绘图字符 |
-h | 列出树状图时,特别标明现在执行的程序。 |
-H | 和-h类似,但特别标明(高亮显示)指定的程序 |
-l | 采用长列格式显示树状图 |
-n | 用程序识别码排序,预设是以程序名称来排序 |
-p | 显示程序识别码(PID) |
-u | 显示用户名称 |
-U | 使用UTF-8列绘图字符 |
-T | 不显示线程thread,默认显示线程 |
1.3 top命令
格式:top [-d秒数]
功能:动态显示CPU利用率,内存利用率和进程状态等相关信息,是目前使用最广泛的实时系统性能监视系统。默认每5秒更新显示信息," -d秒数 "选项可指定刷新频率。
ps 命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且,如果管理员需要实时监控进程运行情况,就必须不停地执行 ps 命令,这显然是缺乏效率的。为此,Linux 提供了 top 命令。top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。
主要选项:
-b | 以批处理模式显示程序信息,一般和"-n"选项合用,用于把 top 命令重定向到文件中 |
-c | 显示完整命令 |
-d | 指定 top 命令每隔几秒更新。默认是 3 秒 |
-n | 指定 top 命令执行的次数(也可以表示更新几次后停止更新显示),一般和"-"选项合用 |
-S | 以累积模式显示程序信息 |
-s | 使 top 命令在安全模式(不使用交互指令)中运行,避免在交互模式中出现错误 |
-p | 查看指定 ID 的进程 |
-u 用户名 | 只监听某个用户的进程 |
然后执行top命令后,在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:
?或 h | 显示交互模式的帮助 |
c | 按照CPU的使用率排序,默认遵循此选项排序 |
M | 按照内存的使用率排序 |
N | 按照PID排序 |
T | 按照CPU的累积运算时间排序,也就是按照“TIME+项”排序 |
k | 按照PID给予某个进程一个信号,一般用于终止某个进程,信号9是强制中止的信号 |
r | 按照PID给某个进程重设优先级(Nice)值 |
q | 退出top命令 |
2. 搜索查找进程
pgrep命令
格式: pgrep [options] pattern
作用:通过程序的名字或其他属性查找进程,一般用来判断程序是否正在运行。在服务器的配置和管理中,这个工具常被应用,简单明了。pgrep程序检查系统中活动的进程,报告进程属性,匹配命令行上指定条件的进程ID。每一个进程 ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。
-U或-u | 指定用户进程 |
-l | 显示进程名 |
-a | 显示完整格式的进程名 |
-P | 显示指定进程的子进程 |
注:有时候已知程序名不知道pid号,我们可以使用如下命令:
pidof 命令
作用:根据进程名 来找pid号
3. 控制管理进程
3.1 kill命令
格式:kill [信号] PID
作用:kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。而且通常中止一个前台进程可以使用Ctrl+c,对于后台进程就需要使用kill命令来中止,就需要先使用ps/pidof/pstree/top/等工具获取PID。
也就是说,kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。
注:kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,可以使用 kill -l 命令查看所有信号及其编号。
日常主要的信号代码如下:
-0 | 给所有在当前进程组中的进程发送信号,程序退出时收到该信息 |
-1 | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化 |
-2 | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号 |
-3 | 退出 |
-9 | 杀死进程,即强制结束进程 |
-11 | 段错误 |
-15 | 正常结束进程,是 kill 命令的默认信号 |
-17 | 将进程挂起 |
-19 | 将挂起的进程激活 |
3.2 killall命令
格式:killall [选项] [信号] 进程名
作用:killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用。
选项:
-i | 交互式,询问是否要杀死某个进程 |
-l | 忽略进程名的大小写 |
3.3 pkill命令
格式:pkill [信号代码] 进程名
作用:当作于管理进程时,pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程。
前台进程与后台进程
默认情况下,一个命令执行后,此命令将独占Shell,并拒绝其他输入。称为前台进程。反之,则称为后台进程。对每一个终端,都允许有多个后台进程。对前台进程/后台进程的控制与调度,被称为任务控制。
将一个前台进程放入后台:
command & #将一个进程直接放入后台。
ctrl + z #将一个正在运行的前台进程暂时停止,并放入后台。
控制后台进程:
jobs #列出系统作业号和名称
fg [%作业号] #前台恢复运行
bg [%作业号] #后台恢复运行
kill [%作业号] #给对应的作业发送中止信号
注:& 还可以并行执行任务
如:ping 127.0.0.1&ping 127.0.0.2&ping 127.0.0.3&
调度进程
1. at 调度
格式:at [选项] [时间]
作用:设置指定时间执行指定的命令(一次性的调度)
选项
-f | 从指定文件而非标准输入设备获取将要执行的命令 |
-l | 显示等待执行的调度作业 |
-d | 删除指定的调度作业 |
进程开始执行的时间格式如下:
绝对计时法:
HH:MM
采用24小时计时制,如果采用12小时计时制,则需要在时间后面加上AM或PM。
比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。
MMDDYY 或 MM/DD/YY 或 DD.MM.YY
指定具体日期,必须在 “HH:MM” 后,比如 011518 表示 2018 年 1 月 15 号。
相对计时法:
now+时间间隔
以 minutes、hours、days 或 weeks 为单位
例如 now+5 days 表示命令在 5 天之后的此时此刻执行。
直接计时法:
today 今天
tomorrow 明天
Midnight(midnight)深夜,代表 12:00 AM(也就是 00:00)
Noon(noon) 中午,代表 12:00 PM(相当于 12:00)
Teatime(teatime) 下午茶,代表 4:00 PM(相当于 16:00)
2. batch调度
格式:batch [选项] [时间]
作用:与at命令几乎一模一样,二者命令的选项也相同。唯一的区别在于,如果不指定运行时间,进程将在系统较空闲时运行。batch调度适合于时间上要求不高,但是运行时占用系统资源较多的工作。
3. cron调度
at调度和batch调度中指定的命令只能执行一次,但是实际工作时,,有些命令需要在指定日期和时间重复执行,这时,cron调度就能很好满足这一点。
cron调度与crond进程 , crontab命令和crontab配置文件有关。
3.1 crontab配置文件
用户的crontab配置文件保存于 “/var/spool/cron” 目录中,其文件名与用户名相同。crontab配置文件保存cron调度的内容,共有6个字段,从左到右依次为分钟、时、日期、月份、星期和命令,如表所示。
字段 | * | * | * | * | * | |
分钟 | 时 | 日期 | 月份 | 星期 | 命令 | |
取值范围 | 0~59 | 0~23 | 01~31 | 01~12 | 0~6,0为星期天 |
1)所有字段不能为空,字段之间用空格分开,如果不指定字段内容,则使用 “*”符号,代表任何时间。
2)可使用 “-”符号表示。如在日期字段中输人“1一5”,表示每个月前5天每天都要执行该命令。
3)可使用 "," 符号来表示指定的时间。如在日期字段中输入“5,15,25”,则表示每个月的5日、15日 和25日都要执行该命令。
4)可使用 "/(正斜线)" 代表每隔多久执行一次。比如"*/10****命令",代表每隔 10 分钟就执行一 次命令。
5)如果执行的命令未使用输出重定向,那么系统把执行结果以邮件的方式发送给crontab文件的 所有者,用户可用mail命令查看邮件。
3.2 crontab 命令
格式: crontab [选项]
作用:维护用户的crontab配置文件
选项
-e | 创建并编辑crontab配置文件 |
-l | 显示crontab配置文件的内容 |
-r | 删除crontab配置文件 |
-i | 在删除用户的 crontab 文件时,给确认提示。 |
-u | 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行 |
3.3 crond进程
crond进程在系统启动时自动启动,并一直运行于后台。crond 进程负责检测crontab配置文件,并按照其设置内容定期重复执行指定的cron调度工作。创建或修改了crontab配置文件后,要用“service crond restart”命令重启crond服务。
注:在创建crontab 定时任务时,需要注意以下几个事项:
6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。
在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。