Linux 基础-6

进程

查看进程

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 结束前台运行的任务。可以使用 killpkill 命令来结束指定进程

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
  • 散列数字
上一篇
下一篇