当我在 linux-system/bash 上运行时:
sleep 10 &
我立即得到 bash 提示。
但是当我跑步时:
ssh linux-system 'sleep 10 &'
我等了10秒。
两个问题:
我可以在 ssh/bash 文档中找到解释吗?
通过改变上下文/配置,我们可以让 ssh 立即返回,而不改变命令
sleep 10 &
本身吗?例如:
ssh linux-system 'change-bash-configuration; sleep 10 &'
或者
ssh -some-ssh-options linux-system 'sleep 10 &'
更新 1
我们可以使用ssh -f
来获取提示,但后台ssh
进程仍然在等待远程进程完成。所以我的问题仍然存在。
更新 2
需要澄清的是,我希望ssh
在后台启动远程作业后,本地进程终止(而不是在后台等待 10 秒)。
实际上,行为是相同的。发生的情况是,您正在将 发送到远程
sleep
计算机的后台,但您没有将命令发送到本地计算机的后台。因此,本地计算机等待完成,而等待完成。ssh
ssh
ssh
sleep
如果你希望立即获取本地提示,可以将以下命令发送
ssh
到后台:但是,这可能会引发另一个问题,因此如果这是您想要的行为,请使用
-f
:或者确保没有输入
ssh
来自终端的命令如果您希望命令在远程服务器上继续执行,即使您关闭了本地终端,您也可以使用
nohup
:或者
至于在哪里记录这一点,不太可能明确提及,这不是一个特殊功能或任何东西,只是您的原始版本没有将其发送
ssh
到后台。根据 ssh 手册页
ssh 不会立即退出的原因是远程命令仍打开了 stdin、stdout、stderr。如果您关闭它们,它应该会立即返回。
这将替换 sleep 的 stdin、stdout 和 stderr。Bash 仍打开这些。但由于 sleep 现在处于后台,由于这不是交互式 bash shell,因此 bash 无需执行任何操作并退出,从而关闭远程 sshd 为 stdin、stdout 和 stderr 提供的连接。由于此时没有打开的 ssh 连接,因此它可以关闭 ssh 会话并退出。
为了稍微扩展一下这个例子,如果你运行
然后 ssh 将建立一个 X11 隧道,然后 xclock 将通过该隧道打开连接。(需要 sleep 来给 xclock 时间在 bash 退出之前启动。)然后 Bash 将退出,但 X11 连接将持续,ssh 将不会退出。如果您终止 ssh,xclock 将失去通过隧道的连接,窗口将关闭。如果您关闭或终止 xclock 窗口本身,xclock 将关闭 X11 连接,并且由于这是最后一个连接,ssh 将退出。