我已经编写了一个SSH客户端来连接网络设备,一旦运行命令超过25秒,我就通过"select"设置超时.我注意到一些设备,他们有另一个IOS,一旦超时被触发,它就不能通过Close()方法丢弃SSH会话,并导致goroutinge泄漏.我需要保持客户端并断开会话以准备下一个命令.看起来goroutine在那个时候永远不会终止!你们有什么想法吗?
go func() {
r <- s.Run(cmd)
}()
select {
case err := <-r:
return err
case <-time.After(time.Duration(timeout) * time.Second):
s.Close()
return fmt.Errorf("timeout after %d seconds", timeout)
}
Run Code Online (Sandbox Code Playgroud)
通过堆分析,我看到了以下内容:2.77GB 99.44%99.44%2.77GB 99.44%bytes.makeSlice
0 0% 99.44% 2.77GB 99.44% bytes.(*Buffer).ReadFrom
0 0% 99.44% 2.77GB 99.44% golang.org/x/crypto/ssh.(*Session).start.func1
0 0% 99.44% 2.77GB 99.44% golang.org/x/crypto/ssh.(*Session).stdout.func1
0 0% 99.44% 2.77GB 99.44% io.Copy
0 0% 99.44% 2.77GB 99.44% io.copyBuffer
0 0% 99.44% 2.78GB 99.93% runtime.goexit
Run Code Online (Sandbox Code Playgroud)
在/usr/local/go/src/runtime/asm_amd64.s中的例程======================== runtime.goexit
0 2.78GB (flat, cum) 99.93% of Total
. . 1993: RET …Run Code Online (Sandbox Code Playgroud) 我Net::Jabber::Bot在我的Perl脚本中使用模块并且它正常工作但是一个问题是,当我想发送消息时,所有新行都被删除了!两个问题:
chomp某个地方吗?