如何通过LLDB将按键传递给macOS上独立终端运行的进程?
解决macOS无头mpv进程的控制问题
非调试器方案:使用reptyr重定向终端
reptyr可将运行中进程的终端关联到当前终端,适配你的场景:
- 通过SSH连接到macOS机器,安装reptyr(未安装时执行):
brew install reptyr - 用
ps aux | grep mpv获取mpv的PID - 执行命令接管mpv的终端:
注:需sudo权限,执行后当前SSH终端会接管mpv的输入输出,直接按空格(暂停/播放)、方向键(快进/快退)等按键即可控制。sudo reptyr <MPV_PID>
LLDB调试器方案:模拟按键或重定向stdin
若无法使用reptyr,可通过LLDB附加进程实现控制:
方法1:单次发送控制按键
- 附加到mpv进程:
lldb -p <MPV_PID> - 在LLDB交互界面执行以下命令(以发送空格暂停为例):
可替换(lldb) expr int fd = open("/dev/tty", O_WRONLY); (lldb) expr write(fd, " ", 1); (lldb) expr close(fd);" "为其他控制字符:如"m"静音、"f"全屏、"\x1b[B"向下箭头快进等
方法2:永久重定向stdin到当前终端
如需持续输入控制命令,可将mpv的stdin绑定到当前SSH终端:
- 先执行
tty命令获取当前终端路径(如/dev/ttys001) - 在LLDB中执行:
之后直接在SSH终端输入按键即可控制mpv。(lldb) expr int new_stdin = open("/dev/ttys001", O_RDWR); (lldb) expr dup2(new_stdin, 0); (lldb) expr close(new_stdin); (lldb) continue
后续预防提示
后续启动mpv时,可使用screen或tmux,即使终端窗口关闭也能重新接管进程:
screen mpv <媒体文件路径>
内容的提问来源于stack exchange,提问作者Adonis




