ssh阻塞与重定向

发布于 2022-09-01 19:59:20 字数 631 浏览 27 评论 0

在平常的使用中,经常会有需要通过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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

昇り龍 2022-09-08 19:59:20

因为 ssh 在等标准输出的关闭:

read(3, "", 4)                          = 0
close(3)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

sleep 程序并不会关闭标准输出,因此 ssh 就会一直等待它了。通过 lsof 可以看到,这时 sleep 的标准输出是连接到管道上的,ssh 在等它。

PS: 调查这种问题,htop 很好用的哦(快捷键 l 调 lsof,s 调 strace)~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文