Files
kenaito-kopsc/README.proc.md
T
odboy aa1f592bf3 feat: 新增 proc.list/user.list/pkg.list 命令
proc.list 列出所有进程(ps aux/tasklist)
user.list 列出系统用户(getent passwd/net user)
pkg.list 列出已安装软件包(dpkg/rpm/apk/brew/winget)
2026-11-03 21:28:15 +08:00

151 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 本机进程(`kopsc proc <子命令>`)
> 返回 [README.md](README.md)
在后台运行命令并写日志,关掉终端也不会退出;也可以等某个进程退出后再继续;
还能按资源占用排序查看进程、按名称终止进程、查看进程树。
```bash
kopsc proc list # 列出所有进程
kopsc proc nohup ./server # 后台运行命令,输出写日志
kopsc proc wait nginx # 等 nginx 退出后返回
kopsc proc topmem # 内存占用前 10 的进程
kopsc proc topcpu # CPU 占用前 10 的进程
kopsc proc killname nginx --yes # 终止名为 nginx 的进程
kopsc proc tree # 查看进程树
```
## 列出所有进程(proc.list)
```bash
kopsc proc list
```
列出系统中所有正在运行的进程。Linux/macOS 使用 `ps aux`,Windows 使用 `tasklist`。
## 后台运行(proc.nohup)
`kopsc proc nohup <命令> [参数...]` 等价于 `nohup <命令> > output.log 2>&1 &`:
启动命令后立刻返回,关闭终端不会终止它。
```bash
kopsc proc nohup ./server -port 8080 # 日志写到 ./server.out(同 nohup.out)
kopsc proc nohup -o /var/log/server.log ./server # 指定日志
kopsc proc nohup -C /srv/app --env=APP_ENV=prod ./run.sh # 指定工作目录与环境变量
kopsc proc nohup -w ./migrate.sh # 等它结束,并回显日志、透传退出码
kopsc proc nohup --dry-run ./server # 只打印判定依据
```
- 标准输入接到空设备;标准输出与标准错误**都追加**写入日志文件(`>>` 语义),并自动创建日志目录。
- Unix 下子进程进入新会话、无控制终端(相当于 `setsid`),Windows 下以 `DETACHED_PROCESS` 启动。
- 选项只在**命令之前**解析:`kopsc proc nohup ffmpeg -i in.mp4` 中的 `-i` 原样给 ffmpeg,
不会被 kopsc 截获(因此命令自身的 `-n`/`--dry-run` 不会触发 kopsc 的预览)。
需要预览时把 `--dry-run` 写在命令之前、或用 `--` 分隔。
- 不经过 shell,`>`、`|`、`&&` 需要显式写 shell:`kopsc proc nohup sh -c 'a | b > c'`。
### 选项
| 选项 | 说明 |
| --- | --- |
| `-o`, `--out`, `--output` | 日志文件,默认 `<程序名>.out` |
| `-C`, `--dir`, `--chdir` | 子进程工作目录(相对日志路径也基于它),默认当前目录 |
| `-E`, `--env NAME=VALUE` | 追加环境变量,可重复 |
| `-q`, `--quiet` | 不打印启动摘要(PID、日志路径) |
| `-w`, `--wait` | 前台等待命令退出,回显其写入的日志内容并透传退出码 |
| `--detach` / `--no-detach` | 默认脱离会话;`--no-detach` 保留当前会话(类似只加 `&`) |
## 等待进程退出(proc.wait)
`kopsc proc wait <关键字>... [--pid PID]...` 每秒检查一次目标进程是否还在:
存在就继续等,直到它消失为止。适合在脚本里等一个服务真正停下来,
替代 `while pgrep nginx; do sleep 1; done` 这类写法。
```bash
kopsc proc wait nginx # 等所有名字/命令行含 nginx 的进程退出
kopsc proc wait nginx worker # 关键字逻辑与:两个都命中才算目标
kopsc proc wait --pid 1234 # 等指定 PID 退出
kopsc proc wait --pid 1234,5678 # 多个 PID(逗号分隔)
kopsc proc wait nginx --timeout 30 # 最多等 30 秒
kopsc proc wait nginx --once # 只检查一次,不等待
kopsc proc wait nginx --interval 500ms -q # 每 0.5 秒查一次,不打印进度
```
### 匹配规则
- 关键字在**进程名与完整命令行**中匹配,忽略大小写:
`kopsc proc wait nginx` 能命中 `/usr/sbin/nginx -g daemon off;`。
- 给多个关键字时是**逻辑与**:全部命中才算目标进程。
例如 `kopsc proc wait java myapp.jar` 只等「既是 java 进程、命令行里又含 myapp.jar」的那些。
- `--pid` 与关键字可以同时给:任一方仍有进程存在,就继续等待。
- Windows 的 `tasklist` 不提供命令行,关键字只能匹配进程名(如 `nginx.exe`)。
### 退出码
| 退出码 | 含义 |
| --- | --- |
| `0` | 目标进程已全部退出;或启动时本来就没有匹配的进程 |
| `2` | `--timeout` 到期时进程仍在运行,错误信息会列出残留的 PID |
| `1` | 参数错误,或无法列出进程(例如没有权限) |
### 选项
| 选项 | 说明 |
| --- | --- |
| `<关键字>...` | 要等待的进程关键字,可多个(逻辑与) |
| `--pid`, `-p` | 直接指定进程 ID;可写多次或用逗号分隔,如 `--pid 1234,5678` |
| `--timeout` | 最长等待时间,默认不超时;可写 `30`(秒)或 `30s`、`1m` |
| `--interval` | 检查间隔,默认 1 秒 |
| `--once` | 只检查一次并打印结果,不等待 |
| `-q`, `--quiet` | 不打印进度与结束提示 |
> 关键字请直接作为参数书写;若关键字以 `-` 开头,用 `--` 分隔,例如 `kopsc proc wait -- -weird`。
> `--dry-run` 只打印判定依据,不会去查询进程。
## 按资源排序查看进程(proc.topmem / proc.topcpu)
```bash
kopsc proc topmem # 内存占用前 10
kopsc proc topcpu # CPU 占用前 10
kopsc proc topmem 20 # 内存占用前 20
kopsc proc topcpu -n 5 # CPU 占用前 5
```
输出示例:
```
=== 占用 CPU 前 10 的进程 ===
PID CPU 进程 命令
1234 45.2% java java -jar app.jar --spring.profiles.active=prod
5678 12.3% nginx nginx: worker process
```
### 选项
| 选项 | 说明 |
| --- | --- |
| `-n` / `--count` / 位置参数 | 显示数量(默认 10) |
> Windows 下 `proc topcpu` 不可用(tasklist 不报告 CPU 使用率)。
## 按进程名终止进程(proc.killname)
```bash
kopsc proc killname nginx # 列出匹配进程(不执行)
kopsc proc killname nginx --yes # 确认终止
```
匹配规则:进程名或命令行中包含指定关键字(忽略大小写)。
> 这是破坏性命令,未加 `--yes` 时只列出匹配进程并以退出码 2 结束。
## 进程树(proc.tree)
```bash
kopsc proc tree
```
以树形结构显示进程的父子关系。
Linux/macOS 优先使用 `pstree -p`(最佳输出),回退到 `ps -ejH`(Linux)或 `ps -eo pid,ppid,comm`(macOS);Windows 使用 `tasklist /tree`。