ps -ef | grep redis
ps -ef | grep redis 这行命令几乎是 Linux 运维排查 Redis 是否启动、启动参数是什么时最先敲的一条指令。
拆开来看只有两步,但每一步都有细节值得掌握。
- ps -ef —— 把“所有进程的长格式信息”一次性列出来
- ps:process status,查看进程快照。
- -e:every,选中所有进程(等效于 -A)。
- -f:full-format,显示长格式,比默认多以下几列:
UID 启动该进程的用户
PID 进程号
PPID 父进程号
C CPU 占用百分比
STIME 启动日期(或时间)
TTY 关联终端(? 表示后台)
TIME 累计 CPU 时间
CMD 启动命令的完整字符串(含参数)
示例(CentOS 8):
UID PID PPID C STIME TTY TIME CMD
redis 1234 1 0 09:30 ? 00:00:10 /usr/bin/redis-server *:6379
root 5678 5432 0 10:00 pts/0 00:00:00 grep --color=auto redis
- | grep redis —— 用管道 + 文本过滤留下含“redis”的行
- |:管道,把 ps 的标准输出接到 grep 的标准输入。
- grep redis:只保留包含字符串 redis 的行(大小写敏感)。
- 副作用:grep 自身也会带“redis”关键字,所以常出现两条,其中一条就是 grep 本身。
- 常见变种与技巧
- 去掉 grep 自身
ps -ef | grep redis | grep -v grep # -v 表示反向匹配 - 精确匹配命令名,避免把“redis.log”这类文件名也扫出来
ps -ef | grep ‘[r]edis’ # 利用正则把 r 拆到 [] 里,grep 自身不再匹配 - 只想看 PID
pgrep -f redis # 直接返回 PID 列表,脚本里更方便 - 树状看父子关系
ps -ef --forest | grep -C3 redis - 结合 systemd
systemctl status redis # 若用 rpm/deb 包装的服务,首推 systemd 查看
- 在 Docker host 网络模式下的差异
默认 bridge 模式时,Redis 进程在容器 PID 命名空间里,宿主机 ps 只能看到 docker-containerd-shim 等中间层;
host 模式时容器与宿主机共用 PID 命名空间,因此在宿主机执行 ps -ef | grep redis 直接就能看到 redis-server 进程,启动参数、监听端口一目了然——这就是你引用那句话里“能直接在宿主机通过 ps 命令查看到 Redis 进程”的原因。
- 一句话总结
ps -ef | grep redis 就是“列出所有进程,再筛选出含 redis 字样的行”,用来快速确认 Redis 是否已启动、启动用户、PID、完整命令行参数;在 Docker host 网络模式下,宿主机能直接看到 redis-server 进程,而 bridge 模式则通常看不到。
