Bootstrap

Linux之进程管理篇(2)

目录

管理进程任务

1. 监视查看进程

1.1 ps命令

1.2 pstree命令

1.3 top命令

2. 搜索查找进程

3. 控制管理进程

3.1 kill命令

3.2 killall命令

3.3 pkill命令

前台进程与后台进程

调度进程

1. at 调度

2. batch调度

3. cron调度

3.1 crontab配置文件

3.2 crontab 命令

3.3 crond进程


管理进程任务

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 秒这样的时间都不能被识别。
在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。

;