【发布时间】:2020-04-24 11:51:20
【问题描述】:
我正在开发一个简单的 ssh 客户端,它连接到多个远程主机并允许读取日志文件。我设法连接到我的远程计算机并在我的远程计算机上运行命令
stdin, err := session.StdinPipe()
if err != nil {
log.Fatalf("Failed to establish stdin pipe: %v", err)
}
session.Stdout = os.Stdout
session.Stderr = os.Stderr
err = session.Shell()
if err != nil {
log.Fatal(err)
}
reader := bufio.NewReader(os.Stdin)
for {
text, _ := reader.ReadString('\n')
if text == "exit\n" {
break
}
if text == "br\n" {
// ??? HOW ???
continue
}
_, err = fmt.Fprintf(stdin, "%s", text)
if err != nil {
log.Fatal(err)
}
}
当我运行tail -f access.tskv 时,我会在标准输入上得到输出。我的问题是我不知道如何向远程机器上的 shell 发送中断信号。
有什么想法吗?
【问题讨论】:
-
这能回答你的问题吗? How to send control+c from a bash script?
-
@Dexygen 一点也没有
-
好吧,也许这不是一个密切的原因,但肯定有足够的线索:获取你正在运行的 shell 进程的 PID,然后 KILL 它。也许修改您的一般方法,以便可以这样做?
-
@Dexygen 我的远程主机正在执行前台任务,即“tail -f nginx.og”。您如何建议我执行另一个 bash 命令,例如
ps aux而无需先向tail发送 SIGINT? -
它可能看起来有点乱,但我想你以后总是可以打开另一个 shell,只是为了获取 PID。