格式: 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命令
作用:查看进程信息
格式:pstree [选项]
作用:以树状的方式表项进程的父子关系。清楚的表达进程间的相互关系。如果指定用户名称,会以隶属于该用户的第一个进程作为根然后显示该用户的所有进程;如果不指定,则会把系统启动时的第一个进程视为根,并显示之后的所有进程。不加选项,默认只显示各进程的名称。
主要选项:*高亮的为常用选项
-a |
显示每个程序的完整指令,包含路径,参数或是常驻服务的标示 |
-c |
不使用精简标示法 |
-G |
使用VT100终端机的列绘图字符 |
-h |
列出树状图时,特别标明现在执行的程序。 |
-H |
和-h类似,但特别标明(高亮显示)指定的程序 |
-l |
采用长列格式显示树状图 |
-n |
用程序识别码排序,预设是以程序名称来排序 |
-p |
显示程序识别码(PID) |
-u |
显示用户名称 |
-U |
使用UTF-8列绘图字符 |
-T |
不显示线程thread,默认显示线程 |
格式: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命令 |
pgrep命令
格式: pgrep [options] pattern
作用:通过程序的名字或其他属性查找进程,一般用来判断程序是否正在运行。在服务器的配置和管理中,这个工具常被应用,简单明了。pgrep程序检查系统中活动的进程,报告进程属性,匹配命令行上指定条件的进程ID。每一个进程 ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。
-U或-u |
指定用户进程 |
-l |
显示进程名 |
-a |
显示完整格式的进程名 |
-P |
显示指定进程的子进程 |
注:有时候已知程序名不知道pid号,我们可以使用如下命令:
pidof 命令
作用:根据进程名 来找pid号
格式: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 |
将挂起的进程激活 |
格式:killall [选项] [信号] 进程名
作用:killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用。
选项:
-i |
交互式,询问是否要杀死某个进程 |
-l |
忽略进程名的大小写 |
格式: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&
格式: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)
格式:batch [选项] [时间]
作用:与at命令几乎一模一样,二者命令的选项也相同。唯一的区别在于,如果不指定运行时间,进程将在系统较空闲时运行。batch调度适合于时间上要求不高,但是运行时占用系统资源较多的工作。
at调度和batch调度中指定的命令只能执行一次,但是实际工作时,,有些命令需要在指定日期和时间重复执行,这时,cron调度就能很好满足这一点。
cron调度与crond进程 , crontab命令和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命令查看邮件。
格式: crontab [选项]
作用:维护用户的crontab配置文件
选项
-e |
创建并编辑crontab配置文件 |
-l |
显示crontab配置文件的内容 |
-r |
删除crontab配置文件 |
-i |
在删除用户的 crontab 文件时,给确认提示。 |
-u |
用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行 |
crond进程在系统启动时自动启动,并一直运行于后台。crond 进程负责检测crontab配置文件,并按照其设置内容定期重复执行指定的cron调度工作。创建或修改了crontab配置文件后,要用“service crond restart”命令重启crond服务。
注:在创建crontab 定时任务时,需要注意以下几个事项:
6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。
在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。