Linux 任务管理
- 在指令末尾添加
&可以使指令在后台执行 nohup command [options] [arguments] &- 可以进一步将输出重定向至特定文件
nohup ./myscript.sh > output.log &
& 结合 nohup 指令可以让指令脱离当前终端运行,不受终端 SIGNUP 信号影响
jobs 查看任务列表
jobs -l- 提供详细信息
jobs -p- 仅显示进程组 PGID
jobs -r- 仅显示运行中的任务
jobs -s- 仅显示暂停的任务
Ctrl + Z暂停任务
Ctrl + C终止任务
恢复暂停任务并在后台运行
bg
bg[job_id...]- 恢复运行指定任务
bg[job_id...]- 恢复运行指定任务
将后台任务切换到前台执行
fg
fg[job_id...]
disown 从任务列表中移除任务,或使任务在终端关闭后不会被终止
disown -a- 移除所有任务(终端关闭时仍会被终止)
disown -r- 移除正在运行的任务
disown %<num>- 移除特定任务编号的任务
disown -h %<num>- 移除特定任务编号的任务并使其在终端关闭后不会被终止
- 仅有 bash 支持
-h选项 - 创建 nohup 关联数组跟踪后台进程
- 当接收到 EXIT 信号时执行
disown - 收到
CHLD信号时移除不存在的进程 source /etc/.zshrc- 启用
NO_HUP选项 setopt NO_HUP
zsh 添加脚本使用 nohup[job_num] 模拟 disown -h
参考资料
vim /etc/.zshrc
Linux 进程管理
top 系统实时监控工具
- 输入
top即可 top -p显示指定进程信息
- 基本交互
h:显示帮助信息,列出可用的快捷键W:将当前设置写入~/.toprc文件q:退出topk:终止选定的进程
显示交互
Space:手动刷新屏幕
J:切换文本对齐模式
1:切换到全局CPU使用率视图
t:切换进程和CPU信息显示模式
m:切换内存信息显示模式e:更改下方列表的内存显示单位
V:切换是否以进程树的形式显示
c:切换是否显示完整指令
S:切换到累计时间模式
b:高亮正在运行的进程
x:高亮排序列Shift+<和Shift+>:左右切换当前排序列Shift+P:按CPU使用量排序进程Shift+M:按内存使用量排序进程Shift+T:按CPU使用时间排序进程Shift+N:按PID(进程ID)排序进程
列表筛选
i:忽略闲置进程和僵尸进程
n:限制进程显示数量,0为不限制
u:筛选特定用户进程
查看进程树
pstree
查看进程列表
ps
- 查看全部进程
ps aux
- 查看指定用户
ps -u username
- 查看指定进程
ps -p pid -o pid,ppid,cmd,%cpu,%mem
- 查看特定终端下的所有进程
ps -ft <tty>
查找进程ID
pidof <name> 返回进程名称完全匹配的进程 PID
pgrep [options] <pattern>
- 返回进程名称满足匹配规则的进程 PID 或其他信息
-f同时匹配命令行
-U限制 UID
-l列出进程名称
-a列出进程详细信息
ps aux | grep <pattern>
终止进程
kill 向进程发送信号
kill [-s signal] pid...
- 向 PID 为指定 PID 的进程发送指定信号
-s指定发送的信号,默认为 TERM(15) 终止信号
kill -l [signal]
- 列出信号名称列表
Linux 常见 signal 信号列表
- 终止 SIGTERM (15)
- 强制终止 SIGKILL (9)
- 注意,可能导致数据不一致
- 挂起 SIGHUP (1)
- 中断 SIGINT (2)
- 相当于
Ctrl + C
- 退出 SIGQUIT (3)
- 相当于
Ctrl + \,类似于中断但会生成一个核心转储文件以供调试
- 停止 SIGSTOP (19)
- 相当于
Ctrl + Z
- 继续 SIGCONT (18)
killall [-ssignal] pname- 向名称为指定 pname 的所有进程发送指定信号
pkill [options] pattern- 终止进程名称满足匹配规则的进程
top查看系统实时监控k终止进程,通过输入 PID 指定进程,可以指定信号类型
Linux 服务管理
- 绝大多数 Linux 发行版的 init 方案是
systemd,其管理系统服务的命令是systemctl systemctl命令通常需要 root 权限systemctl --user用于管理用户级别的服务,无需 root 权限
systemd 是为 Linux 操作系统提供一系列系统组件的软件套件,替代了原本的 System V
- systemd 将 service、target(执行模式)、mount、timer、snapshot、path、socket、swap 等统一抽象为 Unit,提供了一种灵活的方式来定义和组织系统的各种资源
- systemd 提供了积极的并行化功能,使用 socket 和 D-Bus 激活来启动服务
- systemd 提供按需启动守护进程(deamon)
- systemd 实现了基于事务依赖性的服务控制逻辑
- systemd 使用Linux控制组(cgroups)替代进程ID跟踪进程,维护装载点和自动装载点
- 等等……
查看正在运行的服务列表
systemctl list-units --type=service--all查看全部(含已加载但未活动)服务
systemctl list-units-file --type=service- 查看全部可用的 systemd 服务文件
查看服务当前状态
systemctl status <service-name>
查看服务详细信息
systemctl show <service-name>
启用/禁用服务
systemctl enable <service-name>
systemctl disable <service-name>
启动/关闭/重启服务
systemctl start <service-name>
systemctl stop <service-name>
systemctl restart <service-name>
重新加载 systemd 配置
sudo systemctl daemon-reload
创建自定义服务
- 参考文档
编辑服务文件
vim /etc/systemd/system/test-app.service
重新加载systemd配置
sudo systemctl daemon-reload
systemd unit 资源管理
- systemd 把系统资源统一抽象为 Unit 这一基本单元
systemctl -t help 列举当前系统可用 Unit 类型
- .target:用于定义一个抽象的目标单元,可以包含其他单元,用于组织和管理资源
systemctl get-default查看启动时的默认 Target
- .device:定义硬件设备,可以包含设备的属性和事件
- .mount:定义装载点,指定文件系统如何挂载到特定目录
- .automount:自动挂载点,在访问时自动挂载文件系统
- 用于懒加载文件系统,以减少资源消耗
- .swap:对交换设备或文件的信息进行编码,用于由系统控制和监督的内存分页
- .service:用于定义和管理系统服务
- 包括服务的描述、启动、停止、重启规则以及依赖关系
- .slice:定义进程组,用于分组和限制资源使用,可以用来控制进程的资源分配和优先级
- .scope:用于将一组进程分组到一个范围中,以便进行资源控制和管理
- 与 .service 单元不同,.scope 单元管理外部创建的进程,并且不单独分出进程
- 通常是由 systemd 自动生成的,用于将一组相关的子进程分组
- .path:对 systemd 监控的路径信息进行编码,用于基于路径的激活
- .socket:用于定义进程间通信的 socket,可以监听网络连接,等待客户端连接
- .busname:用于创建 D-Bus 系统总线名称,以便进程可以通过 D-Bus 通信
- .snapshot:用于创建和管理 systemd 单元的快照
- .timer:定义定时器,可以定期触发其他 Unit 的启动,类似于 cron 任务
systemctl list-units [PATTERN...] 查看系统 Unit 列表
systemctl list-units --all --state=inactive- 列出所有未运行的 Unit
systemctl list-units --failed- 列出加载失败的 Unit
systemctl list-units --type=service- 列出服务类型的 Unit
systemctl status 查看 Unit 状态
systemctl -H root@rhel7.example.com status httpd.service- 显示远程主机的某个 Unit 的状态
systemctl list-dependencies 查看 Unit 依赖
- 默认不显示 target 类型
systemctl list-dependencies --all nginx.service- 显示包含 target 类型
systemctl show 查看 Unit 参数
systemctl show -p CPUShares httpd.service- 查看 Unit 指定属性的参数
sudo systemctl set-property httpd.service CPUShares=500- 设置 Unit 指定属性的参数
unit 配置文件
unit 配置文件常见位置
/etc/systemd/system/
/run/systemd/system/- 运行时
/usr/lib/systemd/system/
systemctl list-unit-files 查看 Unit 配置文件
systemctl list-unit-files --type=service- 列出服务类型的 Unit 配置文件
systemctl cat查看 Unit 配置文件内容
sudo systemctl daemon-reload重新加载 systemd 配置文件
- Author:白鸟3
- URL:https://blog.kun2peng.top/operation/linux_proc
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
