目录
前言
在linux中,为了更好的了解和使服务器有序运行,管理员需要对进程和计划任务做相应的操作,以便能够更好的完成维护任务,本文就介绍了怎么管理和使用。
一、查看进程
1、程序和进程的关系
1.1 程序
保存在硬盘、光盘等介质中的可执行代码和数据
文件中静态保存的代码
1.2 进程
在CPU及内存中运行的程序代码
动态执行的代码
父、子进程--每个程序可以创建一个或多个进程
2、查看进程信息
2.1 ps命令
方法一:ps aux
常用选项 | 说明 |
a | 显示当前终端下的所有进程信息,包括其他用户的进程。 |
u | 表示列出进程的用户 |
x | 显示所有终端的进程 |
实例:[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.1 193832 7104 ? Ss 15:14 0:05 /us
root 2 0.0 0.0 0 0 ? S 15:14 0:00 [kt
root 3 0.0 0.0 0 0 ? S 15:14 0:00 [ks
root 5 0.0 0.0 0 0 ? S< 15:14 0:00 [kw
root 6 0.0 0.0 0 0 ? S 15:14 0:00 [kw
root 7 0.0 0.0 0 0 ? S 15:14 0:00 [mi
root 8 0.0 0.0 0 0 ? S 15:14 0:00 [rc
root 9 0.0 0.0 0 0 ? S 15:14 0:00 [rc
root 10 0.0 0.0 0 0 ? S 15:14 0:00 [wa
root 11 0.0 0.0 0 0 ? S 15:14 0:00 [wa
root 12 0.0 0.0 0 0 ? S 15:14 0:00 [mi
root 13 0.0 0.0 0 0 ? S 15:14 0:00 [ks
root 15 0.0 0.0 0 0 ? S< 15:14 0:00 [kw
root 16 0.0 0.0 0 0 ? S 15:14 0:00 [wa
root 17 0.0 0.0 0 0 ? S 15:14 0:00 [mi
root 18 0.0 0.0 0 0 ? S 15:14 0:00 [ks
root 19 0.0 0.0 0 0 ? S 15:14 0:00 [kw
root 20 0.0 0.0 0 0 ? S< 15:14 0:00 [kw
root 21 0.0 0.0 0 0 ? S 15:14 0:00 [wa
root 42 0.0 0.0 0 0 ? S 15:14 0:00 [mi
root 4333 0.0 0.0 0 0 ? S 16:24 0:00 [kw
root 4374 0.0 0.0 107904 608 ? S 16:29 0:00 sle
root 4375 0.0 0.0 151064 1812 pts/0 R+ 16:29 0:00 ps
主要信息 | 说明 |
USER | 进程的用户 |
PID | 进程的ID |
%CPU | 进程占用的CPU百分比 |
%MEM | 占用内存的百分比 |
VSZ | 该进程使用的虚拟内存量(KB) |
RSS | 该进程占用的物理内存量(KB) |
TTY | 启动进程的终端名,不是从终端启动的进程则显示为? |
STAT | 该进程的状态 |
COMMAND | 进程的启动命令 |
START | 启动该进程的时间 |
TIME | 该进程占用的 CPU 时间 |
常见进程状态:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
-C:进程占用CPU的百分比
TTY终端:CentOS 7系统中,tty1表示图形界面,tty2-tty6表示文字界面,可用Ctrl+Alt+F1-F6进行切换。pts说明是用远程工具连接的,比如xshell,后面的数字代表登录的时间顺序,数字越小证明登录的越早。
僵尸进程--一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
方法二:
ps -elf
常用选项 | 说明 |
-e | 显示系统内的所有进程信息 |
-1 | 使用长格式显示进程信息 |
-f | 使用完整的进程显示进程信息 |
-a | 显示所有进程pid |
-T | 查看线程信息 |
[root@c7-1 ~]#ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 47751 ep_pol 10:53 ? 00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root 2 0 0 80 0 - 0 kthrea 10:53 ? 00:00:00 [kthreadd]
1 S root 4 2 0 60 -20 - 0 worker 10:53 ? 00:00:00 [kworker/0:0H]
1 S root 5 2 0 80 0 - 0 worker 10:53 ? 00:00:01 [kworker/u256:0]
1 S root 6 2 0 80 0 - 0 smpboo 10:53 ? 00:00:00 [ksoftirqd/0]
各列的解释:
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID: 进程的进程ID.
PPID:父进程的进程号(如果该进程是由另一“个进程启动的)
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI: 谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。 pts/0255代表虚拟终端,一般是远程连接的终端;tty1,tty7 代表本地控制台终端
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。
2.2 top命令
top 命令用于查看进程动态信息
参数
参数 | 含义 |
---|---|
d | 改变显示的更新速度 |
c | 显示整个命令行而不只是显示命令名 |
p | 通过指定 PID 来监控某个进程的状态 |
S | 累积模式,会将己完成或消失的子行程的 CPU time 累积起来 |
s | 安全模式,将交互式指令取消, 避免潜在的危机 |
i | 不显示任何闲置或者僵死进程 |
n | 更新的次数,完成后将会退出 top |
实例:
#显示进程信息
top
#显示完整命令
top -c
#以批处理模式显示程序信息
top -b
#以累积模式显示程序信息
top -S
#设置信息更新次数,更新两次后终止更新显示
top -n 2
#设置信息更新时间,更新周期为3秒
top -d 3
#显示指定的进程信息
top -p PID
2.3 pgrep命令
查询进程PID信息:
-l: 选项可同时输出对应的进程名以及PID
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程
实例:
根据特定条件查找进程的PID信息
[root@localhost ~]# pgrep -l "log"
476 xfs-log/dm-0
722 xfs-log/sda1
741 xfs-log/dm-2
2.4 pstree命令
以树形结构列出进程信息:
-p:选项使用时可以同时列出对应的PID号
-u:选项可以列出对应的用户名
-a:选项可以列出完整的命令信息
例:pstree -aup
[root@localhost ~]# pstree -aup
systemd,1 --switched-root --system --deserialize 21
├─ModemManager,823
│ ├─{ModemManager},845
│ └─{ModemManager},853
├─NetworkManager,898 --no-daemon
│ ├─{NetworkManager},906
│ └─{NetworkManager},910
├─VGAuthService,821 -s
├─abrt-watch-log,812 -F BUG: WARNING: at WARNING: CPU:INFO: possible recursi
├─abrt-watch-log,815 -F Backtrace /var/log/Xorg.0.log --/usr/bin/abrt-dump-x
├─abrtd,810 -d -s
├─accounts-daemon,856
│ ├─{accounts-daemon},864
│ └─{accounts-daemon},866
├─alsactl,811 -s -n 19 -c -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf--initf
├─anacron,9397 -s
├─at-spi-bus-laun,1989
│ ├─dbus-daemon,1994 ...
│ │ └─{dbus-daemon},1995
│ ├─{at-spi-bus-laun},1990
│ ├─{at-spi-bus-laun},1991
│ └─{at-spi-bus-laun},1993
├─at-spi2-registr,1997 --use-gnome-session
│ ├─{at-spi2-registr},2000
│ └─{at-spi2-registr}
————————————————
二、控制进程
1、进程的启动方式
1.1 手工启动
前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入“&”符号,执行成功会显示任务序号以及PID号
1.2 自动启动
at一次性启动、crontab周期性启动
2、进程的前后台调度
Ctrl+Z组合键将当前进程挂起
jobs 查看处于后台的任务列表
3、将后台的进程恢复运行
使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作;
使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行。
4、终止进程
4.1 Ctrl+C组合键
中断正在执行的命令
4.2 kill、killall命令
kill:用于终止指定PID号的进程
killall:用于终止指定名称相关的所有进程
-9:用于强制终止
实例:
[root@localhost ~]# pgrep -l "sshd" //查询目标进程的PID 号
5822 sshd
[root@localhost ~]# kill 5822 //终止指定PID 的进程
[root@localhost ~]# pgrep -l "sshd" //确认进程已终止(查询时无结果
4.3 pkill命令
根据特定条件终止相应进程
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程
-9:强制终止
实例:
[root@localhost ~]# pgrep –l -U "hmj" //确认目标进程相关信息3773 bash
[root@localhost ~]# pkill -9 -U "hmj" //强行终止用户hackli 的进程
[root@localhost ~]# pgrep -l -U "hmj" //确认目标进程已被终止
三、计划任务管理
1、at一次性任务设置
1.1 一条计划任务
root@localhost A]# at 10.32 at+需要计划任务的时间 回车确定
at> mkdir zhangsan<EOT> 计划10.32创建zhangsan目录
job 1 at Wed Aug 25 10:32:00 2021
[root@localhost A]#
等到时间就会自动完成任务
1.2 一次性任务创建步骤
第一步:at [HH:MM] [yyyy-mm-dd]
第二步:输入指定命令
第三步:Ctrl+D提交任务
注:若不设定年月日将默认为当天启动
实例:
[root@kgc /]# date
2021年 08月 16日 星期一 16:20:58 +00
[root@kgc /]# at 16:23 2021-08-16
at> pgrep -U root | wc -l > /tmp/ps.root //任务设置完毕后按Ctrl+D 组合键提交
at> <EOT><EOT>
job 1 at Mon Aug 16 16:23:00 2021
[root@localhost ~]# cat /tmp/ps.root //等过了计划时间后验证命令结果202
1.3 查看和删除
atq:查看未执行的任务列表及任务序号
atrm:删除指定未执行任务
实例:
[root@localhost ~]# atrm 2 //删除第 2 条 at 计划任务
[root@localhost ~]# atq //确认第 2 条任务已被删除
2、周期性任务设置
2.1 crontab命令
主要设置文件:
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/ron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
2.2 管理contab计划任务
选项
-e:编辑计划任务列表。
-u:指定所管理的计划任务属于哪个用户。
-l:列表显示计划任务。
-r:删除计划任务列表。
实例:
crontab -u 用户名 #指定XX用户的cron服务
crontab -l #列出当前用户下的cron的详细内容
crontab -r #删除所有用户的cron内容,普通用户执行,只删除自己的cron内容
crontab -e #编辑cron服务
2.3 crontab任务配置格式
配置格式为:时间周期设置 任务内容设置
时间设置格式:分 时 日 月 周
任务内容设置:命令或者脚本文件
分钟 取值为 0~59 的任意整数
小时 取值为 0~23 的任意整数
日期 取值为 1~31 的任意整数
月份 取值为 1~12 的任意整数
星期 取值为 0~7 的任意整数,0 或 7 代表星期日
2.4 时间数值的特殊表示方法
*:表示该范围内的任意时间
-: 表示一个连续的时间范围
,: 表示间隔的多个不连续时间点
/: 指定间隔的时间频率
实例:
0 17 * * 1-5 表示每周一到周五每天17点整
30 8 * * 1,3,5 表示每周一、三、五的8点30分
0 8-18/2 * * * 表示每天8点到18点之间的每两个小时
0 * */3 * * 表示每3天的每个整点
总结
通过对本文的学习,让我们知道了,什么是进程,怎样去查看和控制进程以及掌握crontab计划任务管理。