Linux之进程管理篇(2)

管理进程任务

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,并拒绝其他输入。称为前台进程。反之,则称为后台进程。对每一个终端,都允许有多个后台进程。对前台进程/后台进程的控制与调度,被称为任务控制。

将一个前台进程放入后台:

java 复制代码
command &           #将一个进程直接放入后台。

ctrl + z            #将一个正在运行的前台进程暂时停止,并放入后台。

控制后台进程:

java 复制代码
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 秒这样的时间都不能被识别。

在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。

在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。

相关推荐
WangYaolove13141 分钟前
请解释Python中的装饰器是什么?如何使用它们?
linux·数据库·python
群联云防护小杜15 分钟前
服务器被挂马怎么办?——解决服务器被挂马的方法和步骤
运维·服务器·网络协议·tcp/ip·安全·ddos
明志致远淡泊宁静20 分钟前
记录一次服务器redis被入侵
运维·服务器·redis
Jtti20 分钟前
Jtti:服务器总是自动重启怎么办?
运维·服务器
我是黄大仙22 分钟前
利用飞书多维表格自动发布版本
运维·服务器·数据库·飞书
7yewh30 分钟前
嵌入式硬件实战提升篇(一)-泰山派RK3566制作多功能小手机
linux·arm开发·驱动开发·嵌入式硬件·物联网·智能手机·硬件架构
YRr YRr1 小时前
ubuntu ros 解决建完图后 保存的地图非常小的问题
linux·运维·ubuntu
汤米粥1 小时前
怎么样绑定域名到AWS(亚马逊云)服务器
服务器·云计算·aws
脸ル粉嘟嘟1 小时前
常用命令之Linux&Oracle&Hive&Python
linux·hive·oracle