【问题标题】:How to send CTRL+C WITH JSCH?如何使用 JSCH 发送 CTRL+C?
【发布时间】:2015-08-02 12:56:16
【问题描述】:

我正在使用jsch ChannelShell 向远程系统发送命令,但我无法发送像ctrl+c 这样的特殊命令。我尝试了很多东西,但没有成功。

任何帮助将不胜感激。

【问题讨论】:

  • 请编辑您的问题以包含您打开此频道并发送 ctrl-c 的代码。
  • 您是否尝试发送 Hex 03 或 ETX?
  • Actullay,我意识到,我可以使用 Hex 03 发送 ctrl+c(在 tail 命令运行时尝试过)。但是,当 cat 命令针对一个大文件运行时,我无法以同样的方式停止它。这是什么原因?

标签: c jsch ctrl


【解决方案1】:

您可以简单地发送一个信号。 在您的情况下,它将是 2 对应于 CTRL+C :

channel.sendSignal("2"); // sends (CTRL+C) signal

您可以找到 Unix 信号列表 here

【讨论】:

    【解决方案2】:

    我想,我发现了我的错。 Cat 和 grep(以及那些类型的命令)命令是一次性命令。它们不是连续的。所以我不能打断那些命令。我必须停止监听流才能停止打印输出。

    【讨论】:

    • 等一下!它们是连续的,当然你可以通过发送 SIGINT 来杀死它们。它们通常会在缓冲区实际显示在控制台之前完成输出缓冲区并退出。但是是的,在停止收听之前,您应该停止它们
    【解决方案3】:

    如果你想终止类似tail的操作

    Example -    BufferedReader reader = new BufferedReader(new InputStreamReader(ce.getInputStream()));
             OutputStream out=ce.getOutputStream();
    out.write(3); //terminate the tail command
    
     out.flush();
    

    【讨论】:

    • 请格式化您的代码(Ctrl + K)并添加一些描述性文字,为什么这个答案对提问者有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多