BusyBox 进程管理 ps kill top 详解
进程管理工具
BusyBox 内置的进程相关 Applet 相对精简:
| 命令 | 用途 | 说明 |
|---|---|---|
| ps | 列出运行进程 | 输出格式固定,没有 -o 自定义列 |
| kill | 发送信号 | 支持按 PID 或进程名 |
| pidof | 按名查 PID | pidof sshd |
| top | 实时进程监控 | 简化版 top,功能基础 |
| nice/renice | 调整进程优先级 | 基础支持 |
| sleep | 延时等待 | 整数和小数秒都支持 |
| setsid | 在新会话运行 | 守护进程管理时用到 |
ps 的简化
GNU ps 有几十种输出格式(ps aux、ps -ef、ps -o pid,cmd 等),BusyBox ps 只有几种:
# BusyBox ps 不带参数:显示当前 shell 进程
busybox ps
# 显示所有进程
busybox ps -ef
# 输出列:UID PID PPID C STIME TTY TIME CMD
# 或者
busybox ps aux
# 输出列:USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
BusyBox ps 不支持:
ps -o自定义输出列ps -p指定 PID 列表(用busybox ps | grep替代)- 各种复杂过滤和排序
嵌入式设备上的进程数量通常不多,BusyBox ps 的固定格式够用了。如果需要更灵活的输出,用 busybox ps -ef | grep keyword | awk '{print $2}' 这种组合。
kill 按名杀进程
BusyBox kill 可以接受进程名作为参数(某些 GNU kill 版本需要 killall):
# 按 PID 杀
busybox kill 1234
# 按进程名杀(BusyBox 特色)
busybox kill sshd
# 等价于:for pid in $(busybox pidof sshd); do busybox kill $pid; done
# 强制杀(SIGKILL)
busybox kill -9 1234
busybox kill -9 sshd
发送信号:
# 常用信号
busybox kill -15 1234 # SIGTERM(默认,优雅退出)
busybox kill -9 1234 # SIGKILL(强制)
busybox kill -1 1234 # SIGHUP(重载配置)
busybox kill -HUP 1234 # 用信号名
top 简化版
BusyBox top 没有 GNU top 的交互配置能力,适合一次性快照:
# 默认实时刷新(5 秒一次)
busybox top
# 只跑一次就退出(适合脚本里抓快照)
busybox top -n 1
# 延迟 2 秒刷新一次
busybox top -d 2
BusyBox top 没有交互界面(按 k 杀进程、s 改频率等),想杀进程请开另一个 shell 用 kill。
PID 文件管理
嵌入式进程管理常见模式——脚本里读 PID 文件来监控和杀进程:
#!/bin/sh
PIDFILE=/var/run/mydaemon.pid
# 启动
mydaemon &
echo $! > $PIDFILE
# 停止
if [ -f "$PIDFILE" ]; then
PID=$(cat "$PIDFILE")
if busybox kill -0 $PID 2>/dev/null; then
busybox kill $PID
fi
rm -f "$PIDFILE"
fi
# 检查是否存活
if busybox kill -0 $(cat $PIDFILE) 2>/dev/null; then
echo "running"
else
echo "stopped"
fi