查看进程
pstree以树形结构列出进程信息
pstree [选项] (用户名)
常用命令选项
-p:列出对应进程的PID编号
-a:显示完整的命令行
-u:显示进程的用户名称。
-u 用户名:显示指定用户的进程
-T 不显示线程thread,默认显示线程
-H pid 高亮显示指定进程及其前辈进程
[root@localhost ~]# pstree #显示正在运行的所有进程
[root@localhost ~]# pstree -p lisi #显示lisi用户开启的进程
ps静态查看进程
格式:ps [选项]...
常用命令选项
aux:显示当前终端所有进程(a)、当前用户在所有终端下的进程(x)、以用户格式输出(u)
列出正在运行的所有进程,显示进程信息非常详细
-elf:显示系统内所有进程(-e)、以长格式输出(-l)信息、包括最完整的进程信息(-f)
列出正在运行的所有进程,显示进程父进程信息
PPID为父进程的PID
-l 只能看到当前 Shell 产生的进程
k|--sort 属性 对属性排序,属性前加 - 表示倒序
o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
面试题:找到未知进程的执行程序文件路径(如高cpu进程、病毒等)
[root@localhost ~]#ll /proc/24081/exe
lrwxrwxrwx. 1 root root 0 10月 7 23:11 /proc/24081/exe -> /usr/bin/dd
[root@localhost ~]#rm –rf /usr/bin/dd
[root@localhost ~]#touch a;chattr +i a 创建一个跟刚才删除的那个文件同名的新文件,
添加chattr属性,添加之后这个文件不能被删除修改
prtstat 查看指定的进程
prtstat PID
pgrep根据特定条件查询进程的PID信息
– 用途:pgrep [选项]... 查询条件
常用命令选项
-u:检索指定用户的进程
-x:精确匹配完整的进程名
-P < PID>:显示指定进程的子进程
-a:显示完整格式的进程名
-l:输出进程名,而不仅仅是 PID
top命令——动态查看进程
– 格式:top [选项] 参数
-p 进程PID:仅查看指定 ID 的进程
-d 刷新秒
-U 用户名
按大写P按照CPU排序
按大写M按照内存排序
按大写N按照PID排序
按c按照CPU的使用率排序,默认就是此选项
按大写F通过光标设置字段是否展示,以及展示顺序
top命令输出内容
表头(字段名) 说明
PID 进程的 ID号
USER 该进程所属的用户
PR priority优先级,数值越小 优先级越高
NI nice优先级,数值越小 优先级越高
VIRT 该进程使用的虚拟内存的大小,单位为 KB
RES 该进程使用的物理内存的大小,单位为 KB
SHR 共享内存大小,单位为 KBS进程状态
%CPU 该进程占用 CPU 的百分比
%MEM 该进程占用内存的百分比
TIME+ 该进程总共占用的 CPU 时间
COMMAND 进程的命令名(进程文件、进程名称)
处理僵尸进程
僵尸进程:当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为
一个僵厂进程。
ps -A -o stat,pid,ppid | grep -e '[zZ]' 得到僵尸进程的 PID 及其父进程的 PID
#方法1:恢复父进程
kill -18 <parent_process_ID>
#方法2:杀死父进程
kill -9 <parent_process_ID>
vmstat监控系统资源
vmstat [-a] [刷新延时 刷新次数]
[root@localhost proc]# vmstat 1 3
#使用vmstat检测,每隔1秒刷新一次,共刷新3次
常用选项:
-f显示从启动到目前为止,系统复制(fork)的程序数。此信息是从 /proc/stat 中的 processes字段中
取得的。
-s将从启动到目前为止,由一些事件导致的内存变化情况列表说明。这些信息的分别来
自于/proc/meminfo,/proc/stat和/proc/vmstat。
-S 单位令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。
-d列出硬盘有关读写总量的统计表。-p 分区设备文件名查看硬盘分区的读写情况。
通过分析 vmstat 命令的执行结果,可以获得一些与当前 Linux 运行性能相关的信息。比如说:
r 列表示运行和等待 CPU 时间片的进程数,如果这个值长期大于系统 CPU 的个数,就说明 CPU 不足,
需要增加 CPU。
swpd 列表示切换到内存交换区的内存数量(以 kB 为单位)。如果 swpd 的值不为 0,或者比较大,
而且 si、so 的值长期为 0,那么这种情况下一般不用担心,不用影响系统性能。
cache 列表示缓存的内存数量,一般作为文件系统缓存,频繁访问的文件都会被缓存。如果缓存值较大,
就说明缓存的文件数较多,如果此时 I/O 中 bi 比较小,就表明文件系统效率比较好。
一般情况下,si(数据由硬盘调入内存)、so(数据由内存调入硬盘) 的值都为 0,如果 si、so 的
值长期不为 0,则表示系统内存不足,需要增加系统内存。
如果 bi+bo 的参考值为 1000 甚至超过 1000,而且 wa 值较大,则表示系统磁盘 I/O 有问题,
应该考虑提高磁盘的读写性能。
输出结果中,CPU 项显示了 CPU 的使用状态,其中当 us 列的值较高时,说明用户进程消耗的 CPU
时间多,如果其长期大于 50%,就需要考虑优化程序或算法;sy 列的值较高时,说明内核消耗的 CPU
资源较多。
通常情况下,us+sy 的参考值为 80%,如果其值大于 80%,则表明可能存在 CPU 资源不足的情况。
总的来说,vmstat 命令的输出结果中,我们应该重点注意 procs 项中 r 列的值,以及 CPU 项中
us 列、sy 列和 id 列的值。
结束进程
kill
Ctrl+c 组合键,中断当前命令程序
kill [-9] PID... 、kill [-9] %后台任务编号
killall
killall [-9] 进程名...
- -i:交互式,询问是否要杀死某个进程;
- -I:忽略进程名的大小写;
pkill
pkill [-9] 查找条件 #包含就算
pkill [-U 用户名] 进程名
pkill [-t 终端号] 进程名
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程
控制进程(进程前后台的调度)
&符号: 正在运行的状态放入后台
Ctrl + z 组合键 挂起当前进程(暂停并转入后台)
jobs 命令 查看后台任务列表
fg 命令 将后台任务恢复到前台运行
bg 命令 激活后台被挂起的任务
计划任务
at一次性任务设置
at 工具介绍:
at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,
具体规则如下:
如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用
at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个
用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用at命令的)。
如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件
(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。
如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。
系统中默认只有/etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用at命令。
不过,如果我们打算控制用户的 at 命令权限,那么只需把用户写入 /etc/at.deny 文件即可。
at 设置任务
at [选项] [时间]
at [HH:MM] [yyyy-mm-dd]
#设置具体任务后,按 ctrl+d 提交 。
#若设置具体任务时,想要退格重写,按ctrl+backspace进行退格。
查询和删除at任务:
atq //查看at任务列表
atrm [工作号] //删除指定的at任务
crontab
crontab命令格式:
crontab -e [-u 用户名] //编辑计划任务
crontab -l [-u 用户名] //查看计划任务
crontab -r [-u 用户名] //删除计划任务
#-u选项缺省时默认针对当前用户,只有超级用户才可以使用-u
复制代码
使用 "crontab -e" 进入 crontab 编辑界面。会打开vim编辑你的任务,输入格式为:
* * * * * 需要执行的任务
#即:时间周期设置 任务内容设置。
#任务内容设置中,命令一定要用绝对路径,例如cp命令,要用/usr/bin/cp,可以用which查看命令的
绝对路径
每个星号(*)表示不同的时间概念:
项目 含义 范围
第一个"*" 一小时当中的第几分钟(minute) 0~59
第二个"*" 一天当中的第几小时(hour) 0~23
第三个"*" 一个月当中的第几天(day) 1~31
第四个"*" 一年当中的第几个月(month) 1~12
第五个"*" 一周当中的星期几(week) 0~7(0和7都代表星期日)
时间数值的特殊表示方法:
*(星号)代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
,(逗号)
代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、
16 点 0 分都执行一次命令。
-(中杠)代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
/(正斜线)代表每隔多久执行一次。比如"*/10
crontab注意事项
在书写 crontab 定时任务时,需要注意以下几个事项:
6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3点30分30秒这
样的时间都不能被识别。
在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员
混淆。
在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命
令会报错。