在网络驱动器运行clang编译程序后,后续编译可执行文件为何全部挂起?
在SMB网络共享运行编译后的可执行文件后,本地编译程序全部挂起(macOS)
环境信息
- 设备:搭载M1 Pro芯片、运行macOS 12.6的MacBook Pro
- 编译器:Apple clang 14.0.0(通过删除
DeveloperTools文件夹并执行xcode-select --install全新安装) - Shell:zsh
- 网络共享:通过Finder无配置挂载的SMB共享(Apple ID验证),共享端为运行macOS 11.6.8的Core i5款iMac主目录(已测试根目录和
tmp目录,结果一致)
最小复现步骤
- 使用Apple开发者工具的
gcc编译一个“Hello World”C程序(最初发现时用ghc编译Haskell程序也会出现相同问题) - 运行本地编译的可执行文件,执行正常
- 通过
cd命令进入挂载的网络驱动器目录 - 在该目录下重复编译并运行程序——可执行文件挂起
- 返回本地目录,运行之前编译的可执行文件,依然正常
- 再次在本地编译任何程序(包括原源码)——新编译的可执行文件均会挂起
已尝试的排查操作
- 终止挂起进程、检查
lsof、卸载网络驱动器、登录登出、检查PATH等操作均无效,仅重启系统可恢复正常 - 对比网络目录与本地目录编译时的
gcc -v输出,仅-fdebug-compilation-dir(对应当前工作目录)和目标文件名不同,其余参数完全一致 - 仅编译不会触发问题,运行网络驱动器上的可执行文件才会导致后续本地编译程序挂起
- 查阅Console日志和
system.log,未发现相关异常条目 - 对比
lsof和ps -axww输出,未发现显著差异 - 让挂起的本地进程运行整夜,无任何变化
疑问
这是否触发了macOS的沙箱或安全机制?是clang/llvm的未知特性?还是考虑到ghc(使用原生代码生成器)也出现相同问题,是stdout的实现存在bug?
内容的提问来源于stack exchange,提问作者Heath Raftery
相关产品推荐
相关产品推荐

