BusyBox 中文文档 下载 App

BusyBox 进程管理 ps kill top 详解

进程管理工具

BusyBox 内置的进程相关 Applet 相对精简:

命令用途说明
ps列出运行进程输出格式固定,没有 -o 自定义列
kill发送信号支持按 PID 或进程名
pidof按名查 PIDpidof 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 不支持:

嵌入式设备上的进程数量通常不多,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