AlexXXXX's recent timeline updates
AlexXXXX

AlexXXXX

V2EX member #532036, joined on 2021-02-04 16:59:48 +08:00
Per AlexXXXX's settings, the topics list is hidden
Deals info, including closed deals, is not hidden
AlexXXXX's recent replies
主要是拍林海,看天湖,湿地。有无人机才是王道。
阿尔山到室韦的那条线可以玩 7 天,一个地方没法玩七天。
但是凑满 7 天又回很赶,那边的住宿条件要有心理准备,一些地方似乎只有大车店的水平。
然后就是兴安岭一些地方没有信号
2 days ago
Replied to a topic by Lostbit 生活 有没有不上班不创业也能正常生活的法子
@foryou2023 这个堪比原始人的活法,没想到这里还有刘总的粉丝,哈哈哈哈。杭州那里的打野生活一般人根本受不了,基本上就是副食品开支+手机话费+偶尔的网吧网费(偷电去),他的收入基本来自视频流量补贴,和大哥施舍,靠开宝箱等等早就饿死了,所以这个途径也是一个少数人的赛道————悲惨生活自媒体。 也算 24 小时打工了。
加油,这种代码级的控制很有价值,我之前一直在用 SVG 方案,固定的失败几率很难控制
得掐时间抢了 好像是下周三放下周末的票
我都没看见这个页面,买了数字 IMAX 最大的 环球城市大道的票,这个肯定抢不到啊,还没感受过 70mm 的宽高比
啊,原来不支持 md 格式啊,我在你的 github 项目上提了 issue 。
# Corterm Worker 模式下 shim 递归 fork 导致 EAGAIN

## 环境

- macOS Sonoma 14.x / Apple Silicon
- Claude Code 2.1.139
- Corterm 最新版(通过官方安装脚本)
- 手机端 Cortex Terminal

## 问题描述

在手机端通过 Cortex Terminal 执行 `Claude` 时报错:

```
cortap: failed to start '/Users/<user>/.corterm/shims/claude':
An error occurred trying to start process '/Users/<user>/.corterm/shims/claude'
with working directory '/Users/<user>/project'.
Resource temporarily unavailable
```

初次安装配置后使用正常,后续某次 Worker 重启后开始复现,此后 100% 必现。

## 根因

shim 和 cortap 之间形成递归 fork:

```
用户输入 claude
→ zsh PATH 解析到 shim (~/.corterm/shims/claude)
→ shim exec cortap claude
→ cortap (worker 模式) 解析 "claude" → PATH 中找到的还是 shim
→ 再次 exec shim → exec cortap → ...
→ 内核拒绝分配新进程,返回 EAGAIN
```

zdotdir 的 `.zshrc` 有一段强制把 shims 目录插到 PATH 最前面的逻辑:

```bash
if [[ -n "$CORTERM_SHIMS_DIR" && -d "$CORTERM_SHIMS_DIR" ]]; then
export PATH="$CORTERM_SHIMS_DIR:$_corterm_path"
fi
```

这导致 cortap 在 Worker PTY 内部解析被 wrap 的命令时,永远只能找到 shim 自身而不是真实二进制。

## 临时修复

修改 shim 脚本,在 Worker PTY 环境下直接 exec 真实二进制:

```bash
#!/bin/sh
REAL_CLAUDE="$HOME/.local/bin/claude"
if [ "$XPC_SERVICE_NAME" = "com.corterm.worker" ] || [ -n "$CORTERM_SESSION_ID" ]; then
exec "$REAL_CLAUDE" "$@"
else
exec "$HOME/.corterm/cortap" claude "$@"
fi
```

然后 `chflags uchg` 锁定防止 Worker 重启时覆盖。

## 建议

1. **加递归保护**:shim 里检测环境变量(比如 `_CORTAP_ACTIVE=1`),cortap 启动前 export 这个变量,shim 检测到就直接 exec 真实路径。这是最基本的 wrapper 设计模式。

2. **cortap 不要通过 PATH 解析被 wrap 的命令**:应该用配置文件或硬编码记录真实二进制的绝对路径,否则 PATH 里有 shim 就一定会循环。

3. **错误信息需要改善**:fork bomb 到 EAGAIN 时,cortap 应该记录它尝试启动的路径、当前 PATH 值,以及是否检测到快速重复 fork 。现在用户看到的只有内核错误,完全无法定位问题。

4. **zdotdir 的 PATH 注入应区分场景**:如果当前已经在 cortap 管理的 session 内(比如检测 `XPC_SERVICE_NAME` 或自定义变量),就不应该再把 shims 插到 PATH 里。

5. **不要静默覆盖用户修改过的 shim**:至少做个 checksum 对比,或提供配置项跳过覆盖。

## 误导性

这个 bug 特别难查的原因是 `Resource temporarily unavailable` 指向资源耗尽,正常人的第一反应是去查 jetsam 线程限制、maxproc 、PTY 数量、文件描述符这些系统级限制。实际上是递归 fork 在几毫秒内就把配额打满了,在任何监控工具里看不到进程堆积的痕迹。如果 cortap 有一行日志打印它解析到的路径,这个问题 5 分钟就能定位。
666 老哥,一直在找这样的产品,无痛把终端操控 CC 的体验搬到手机上。还得得推广一下啊,算法平台推给 vibe coding 的人群
Jul 15
Replied to a topic by sickoo 生活 [2026] 通勤鞋子求推荐
ecco 的球鞋不挤脚 夏天也可以穿
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5856 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms · UTC 02:27 · PVG 10:27 · LAX 19:27 · JFK 22:27
♥ Do have faith in what you're doing.