ssh阻塞与重定向
在平常的使用中,经常会有需要通过ssh进行远程操作的场景。最近发现一个ssh的阻塞的问题。
测试脚本:sleeper.sh
#!/bin/bash
sleep 20 &
当通过ssh客户端执行脚本的时候,因为有后台程序执行,会发生阻塞。
[root@ip]# time ssh IP "/bin/bash /tmp/sleeper.sh"
wake up!
real 0m20.198s
user 0m0.002s
sys 0m0.006s
但是加入了标准输出的重定向的时候,就不会被阻塞。
[root@ip]#time ssh IP "/bin/bash /tmp/sleeper.sh >>/dev/null"
real 0m0.201s
user 0m0.003s
sys 0m0.005s
不知道其中的玄机在于哪里。
环境中的ssh版本是:OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为 ssh 在等标准输出的关闭:
sleep 程序并不会关闭标准输出,因此 ssh 就会一直等待它了。通过 lsof 可以看到,这时 sleep 的标准输出是连接到管道上的,ssh 在等它。
PS: 调查这种问题,htop 很好用的哦(快捷键 l 调 lsof,s 调 strace)~