You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过命令查看未完成且创建新Shell的命令调用栈?

查看Shell调用栈(未完成的父Shell列表)

当然有命令行工具可以直接获取这个「Shell调用栈」信息,不用依赖htop的图形界面!下面是几个最实用的方法:

1. 使用 pstree 命令(最直观)

pstree 会以树形结构展示进程关系,加上 -p 参数还能显示PID,非常适合追踪Shell的调用链。如果你想从当前Shell往上追溯所有父Shell,直接执行:

pstree -p $$

这里的 $$ 是当前Shell的PID,命令会输出从当前Shell到系统初始化进程(比如 systemd 或 init)的完整树形链。举个例子,如果你执行了 bash → su - myuser → zsh,输出会类似:

systemd(1)───sshd(1234)───bash(5678)───su(9012)───zsh(3456)

一眼就能看到所有嵌套的Shell和切换用户的进程。

2. 使用 ps 命令的树形选项

ps 也支持树形展示进程关系,常用的组合是:

ps auxf

或者更简洁的格式:

ps -ef --forest

输出会以缩进的树形结构显示所有进程,你可以找到当前Shell的PID(同样用 $$ 确认),然后往上看它的父进程、祖父进程,就能得到完整的调用栈。

3. 手动遍历 /proc 文件系统

Linux的 /proc 文件系统里保存了所有进程的详细信息,你可以手动追踪父进程ID(PPid)来构建调用栈:

  1. 先获取当前Shell的PID:echo $$
  2. 查看父PID:cat /proc/$(echo $$)/status | grep PPid
  3. 重复步骤2,把上一步得到的PPid替换进去,直到PPid为1(系统初始化进程)

比如写个简单的小脚本自动遍历:

pid=$$
while [ $pid -ne 1 ]; do
  echo -n "$pid "
  pid=$(grep -oP 'PPid:\s+\K\d+' /proc/$pid/status)
done
echo $pid

执行后会输出从当前Shell到init的PID链,你可以结合 ps -p $pid -o comm= 来查看每个PID对应的进程名。

这些方法都能直接在命令行输出结果,完全满足你不用htop的需求,而且在远程服务器、无图形界面的环境下都能正常使用。

内容的提问来源于stack exchange,提问作者Melebius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:27:12