You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过LLDB将按键传递给macOS上独立终端运行的进程?

解决macOS无头mpv进程的控制问题

非调试器方案:使用reptyr重定向终端

reptyr可将运行中进程的终端关联到当前终端,适配你的场景:

  1. 通过SSH连接到macOS机器,安装reptyr(未安装时执行):
    brew install reptyr
    
  2. ps aux | grep mpv获取mpv的PID
  3. 执行命令接管mpv的终端:
    sudo reptyr <MPV_PID>
    
    注:需sudo权限,执行后当前SSH终端会接管mpv的输入输出,直接按空格(暂停/播放)、方向键(快进/快退)等按键即可控制。

LLDB调试器方案:模拟按键或重定向stdin

若无法使用reptyr,可通过LLDB附加进程实现控制:

方法1:单次发送控制按键

  1. 附加到mpv进程:
    lldb -p <MPV_PID>
    
  2. 在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终端:

  1. 先执行tty命令获取当前终端路径(如/dev/ttys001
  2. 在LLDB中执行:
    (lldb) expr int new_stdin = open("/dev/ttys001", O_RDWR);
    (lldb) expr dup2(new_stdin, 0);
    (lldb) expr close(new_stdin);
    (lldb) continue
    
    之后直接在SSH终端输入按键即可控制mpv。

后续预防提示

后续启动mpv时,可使用screentmux,即使终端窗口关闭也能重新接管进程:

screen mpv <媒体文件路径>

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

火山引擎 最新活动