我正在使用 Mac 的终端应用程序,我知道如何通过 ssh ( ssh -l username domain.com)连接到外部服务器。但是,一旦完成,我该如何关闭连接?谢谢。
这个问题已经拿出了相当 一个 不少(真的 很多),但我发现答案是一般不完整。一般的问题是“当我退出/杀死 ssh 时,为什么我的工作会/不会被杀死?”,这就是我发现的。第一个问题是:以下信息的一般性如何?以下似乎适用于现代 Debian linux,但我遗漏了一些内容;其他人需要知道什么?
当 ssh 连接关闭时,所有通过 ssh 连接打开的 shell 的后台或非后台子进程都会被 SIGHUP 杀死,仅当huponexit设置了该选项时:运行shopt huponexit以查看这是否为真。
如果huponexit为 true,则您可以使用nohup或disown将进程与外壳分离,以便在退出时不会被杀死。或者,使用screen.
如果huponexit为 false,这至少是目前某些 linux 上的默认值,那么在正常注销时不会终止后台作业。
但即使huponexit是假的,那么如果 ssh 连接被杀死或断开(与正常注销不同),那么后台进程仍然会被杀死。这可以通过disown或nohup如 (2) 中那样避免。
(a) 父进程是终端的进程和 (b) 具有连接到终端的stdin、stdout 或 stderr 的进程之间存在一些区别。我不知道 (a) 而非 (b) 的进程会发生什么,反之亦然。
最后一个问题:我怎样才能避免行为(3)?换句话说,默认情况下,在 Debian 后台进程在注销后自行运行,而不是在 ssh …
在工作中,我启动一个终端并开始执行一些巨大的过程(可能需要几个小时才能完成)然后离开办公室。当我到家时,我想检查进程发生了什么(不仅仅是检查它是否仍在运行,还要查看输出)。有没有办法连接到同一个终端并查看正在进行的过程。
基础工作:我尝试阅读有关此名为 screen 的实用程序的信息。但它允许我的远程机器附加到我在工作时开始的会话。它不允许我连接到该外壳并查看进度。