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

如何在VS Code终端的SSH会话中向远程程序传递Ctrl+C命令

解决VS Code终端中SSH远程程序Ctrl+C无法终止的问题

一、修复SSH伪终端分配失败问题

你遇到的Pseudo-terminal will not be allocated because stdin is not a terminal提示,是因为单-t参数在非交互式脚本环境下无法强制分配伪终端。改用双-t参数(ssh -tt user@remote-host)即可强制创建伪终端,让Ctrl+C的SIGINT信号能传递到远程进程。

示例脚本修改:
原命令:

ssh user@remote "./your-program.sh"

修改为:

ssh -tt user@remote "./your-program.sh"

二、VS Code 1.84相关设置调整

调整VS Code终端的信号传递配置,确保快捷键能穿透到远程会话:

  • 打开设置(快捷键Ctrl+,),搜索terminal.integrated.sendKeybindingsToShell,设置为true,让终端将快捷键直接发送给底层shell(包括SSH会话),而非被VS Code拦截。
  • 搜索terminal.integrated.allowChainedCommands并开启,该选项支持多层终端的命令信号传递,配合-tt参数使用效果更佳。

三、脚本层面优化:确保信号直达远程程序

如果上述方法仍无效,可通过以下两种方式优化远程命令的执行逻辑:

  1. 使用exec替换远程shell进程:
    ssh -tt user@remote "exec ./your-program.sh"
    
    exec会让远程shell直接替换为目标程序,而非创建子进程,这样SIGINT信号会直接发送给目标程序,避免被shell捕获。
  2. 启用进程组管理:
    ssh -tt user@remote "set -m; ./your-program.sh"
    
    set -m会让远程程序在独立进程组中运行,按Ctrl+C时整个进程组都会收到信号,防止远程程序后台运行脱离控制。

四、验证方法

修改后运行脚本启动远程程序,按Ctrl+C后,登录远程机器执行ps aux | grep your-program.sh,确认进程已终止即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:52:50