进程
查看进程
ps
ps(Process Status) 命令用于显示当前进程的状态
ps [options]
# -A 显示所有进程,但不显示进程状态
# -a 显示当前终端的所有进程,包括其他用户的进程
# -u 显示进程详细信息
# -x 显示所有进程
# 显示所有包含其他使用者的进程
root@debian-vm:~# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 167876 12340 ? Ss 17:40 0:00 /sbin/init
# USER : 进程所有者
# PID : 进程 ID
# %CPU : CPU 使用率
# %MEM : 内存使用率
# VSZ(Virtual Size) : 虚拟内存大小
# RSS(Resident Set Size) : 物理内存大小
# TTY : 进程类型,如果是从文件或脚本启动的进程,可能是 ?
# STAT : 进程状态,常见的状态如下
## R : 运行
## S : 睡眠
## D : 不可中断的睡眠
## Z : 僵尸进程
## T : 停止
## X : 结束
## < : 高优先级
## L : 锁定
## + : 位于后台
# START : 进程启动时间
# TIME : 进程运行时间
# COMMAND : 执行的指令
top
top 可以实时监控进程运行状态
top [options]
# -n 指定更新次数
root@debian-vm:~# top
top - 18:20:52 up 40 min, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 85 total, 1 running, 84 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3915.3 total, 3610.3 free, 342.0 used, 157.3 buff/cache
MiB Swap: 975.0 total, 975.0 free, 0.0 used. 3573.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 167876 12340 9180 S 0.0 0.3 0:00.54 systemd
# top - 系统时间 up 已运行时间, 当前登录用户数, 1、5、 15 分钟系统平均负载
# Tasks: 进程总数, 运行数量, 睡眠数量, 停止数量, 僵尸数量
# %Cpu(s): 用户空间占比, 系统空间占比, 具有 nice 值的进程占比, 空闲 CPU 占比, 等待操作完成占比, 硬件中断请求占比, 软件中断请求占比, 虚拟化占比
# MiB Mem : 物理内存总量, 空闲内存, 内存使用量, 缓存量
# Mib Swap: 交换区总量, 空闲数, 使用量, 可用内存
# PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
# 进程 ID 所有者 优先级 nice 值 虚拟内存用量 物理内存用量 共享内存大小 进程状态 CPU 占比 物理内存占比 运行时间 进程名称
pstree
将所有进程以树状图显示
pstree [options]
# -p 附带进程号显示
root@debian-vm:~# pstree
systemd─┬─agetty
├─avahi-daemon───avahi-daemon
├─cron
├─cups-browsed───2*[{cups-browsed}]
├─cupsd
├─dbus-daemon
├─dhclient
├─exim4
├─sshd───sshd───bash───pstree
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─wpa_supplicant
进程管理
用户在终端或通过图形界面执行一个程序时,会创建一个新的进程来运行这个程序。在命令结尾处加上 &
可以使进程位于后台运行
使用 Ctrl+Z 组合键可使当前终端的进程挂入后台并停止执行,使用 jobs
命令能查看作业列表
root@debian-vm:~# jobs
[1]+ Stopped ping 127.0.0.1
# [作业号] 状态 任务
nohup
命令可以防止进程在终端关闭后被终止,并且可以将其直接放到后台运行并在当前路径留下执行日志 nohup.out,命令格式为 nohup COMMAND &
root@debian-vm:~# nohup ping -c 3 127.0.0.1 &
[1] 1584
root@debian-vm:~# nohup: ignoring input and appending output to 'nohup.out'
fg
用于将后台作业移至前台运行。当一个前台作业 (如 Ctrl+Z)被暂停时,bg
可以不中断其他前台任务的情况下,让这个作业在后台继续执行
fg [job_spec]
fg %1 # 将作业号为 1 的进程移至前台运行
bg [job_spec]
关闭进程时,可以按下 Ctrl+C 结束前台运行的任务。可以使用 kill
和 pkill
命令来结束指定进程
kill [options] pid
# -9 强制结束进程
pkill [options] pname
pkill ping # 结束所有 ping 进程
计划任务
at
命令能安排一次性任务在指定时间点执行
at [options]
# -l 显示任务列表
# rm 删除指定任务
# -q 指定新任务名称
# -m 任务执行后发送邮件
root@debian-vm:~# at now + 1 min # 创建一个一分钟后执行的任务
warning: commands will be executed using /bin/sh
at Tue Jun 25 23:03:00 2024
at> date
at> <EOT> # Ctrl+D 提交
job 4 at Tue Jun 25 23:03:00 2024
root@debian-vm:~# date
Tuesday, June 25, 2024 PM11:02:59 HKT
crond 服务根据 /etc/crontab 文件中的计划来周期性执行任务,使用前记得查看 crond 服务状态 (systemctl status crond.service
) ,可以使用 systemctl start crond.service
命令启动 crond 服务,也可以使用 systemctl restart crond.service
命令重启服务
所有用户创建过的 crontab 任务都被保存在 /var/spool/cron/ 目录下,每个任务以创建者的名字命名。可以把脚本放在 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly 目录中,让它每小时/天/星期、月执行一次
crontab [-u user]
# -e 编辑计划
# -l 显示计划列表
# -r 删除计划
# -u 指定用户的计划
crontab -e
进入计划表内进行编辑,每一行算一个计划任务。计划由 时间+动作构成,详细组成如下 :
# minute hour day month week command
# (0-59) (0-23) (1-31) (1-12) (0-7)
* * * * * clear # 每分钟执行一次 clear
1,5 * * * * clear # 每小时的第 1 分钟和第 5 分钟执行 clear
* 6 * * * * clear # 每天 6 点执行 clear
* /6 * * * * clear # 每隔 6 小时执行 clear
50 5 15 * * clear # 每月 15 号的 5:50 执行 clear
* 23-6/4 * * 7 clear # 每周日晚上 23 点到早上 6 点隔 4 小时执行 clear
- * 取值范围内的所有数字
- / 每过多少个数字
- – 从 X 到 Z
- ,散列数字