linux - 关于 nohup ssh 的内部结构

标签 linux bash ssh jobs

我盲目地使用 nohup ssh 来发出远程 ssh 命令,而不用担心意外挂断。现在开始想了,不是很清楚。

我想知道的是,为什么只是执行“ssh remote sleep 100 &”几秒钟后就停止了工作?例如,

$ ssh remote sleep 100 &
[1] 13358
$ 
[1]+  Stopped                 ssh remote sleep 100

这个作业是什么原因停止的?你能解释一下这个作业控制的内部结构吗?

最佳答案

  • 如果您希望远程命令在完成之前一直工作(并且不依赖于与远程主机的 ssh 连接):您可以使用 screen(或 tmux)。

    • 使用 ssh 连接到远程主机
    • 一旦连接:screen 启动屏幕 session (一种“虚拟终端”,它将一直运行直到您关闭它,而不是依赖于您自己与它的连接)
    • 然后你可以从屏幕上分离(ctrl-a d)并稍后重新连接到它(从另一台机器等):再次ssh,“screen -l”列出屏幕,“screen -r”到重新连接到一个。在网上阅读有关屏幕的信息。
  • 您的作业停止的原因与命令无关,而是与作业处理的内部有关。一些(好的)信息可以在 http://www.linusakesson.net/programming/tty/ 上找到(如果您没有阅读整篇文章,请搜索 background。但请阅读整篇文章 ^^)。简而言之 ...从后台作业写入 TTY 将导致 SIGTTOU 暂停整个进程组(也许您的 ssh 要求输入密码?或者它在连接时显示一些内容?)

与在远程主机上运行“nohup”相比,screen 的优势很多。主要的是,如果您尝试重新连接到 nohup 程序(例如:vi),则无法(轻松)完成……特别是如果它是多行的。但是当你重新连接到屏幕 session 时,你会看到(虚拟)终端,就好像你从未离开过它一样(即,如果命令在屏幕上添加了东西,它就会更新,并且它仍然有行/列等)。

您还可以在同一终端上与多个人一起工作(或者让其他人在一个人工作时“查看”)。

等等

关于linux - 关于 nohup ssh 的内部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20651714/

相关文章:

linux - 处理 bash 脚本中调用的 python 文件的输出

linux - 在发送到 rsyslog 的 Linux 审核日志中配置服务器名称

android - android : No such file or directory 上的 Rsync 和 ssh

c - 使用 libssh 打开到本地主机的 channel

perl - 使用 Net::OpenSSH 将文件从远程计算机传输到本地计算机

linux - spawn_id : spawn id exp6 not open

linux - 在 Linux 上运行程序化 Postgres 数据库迁移的最佳实践

windows - Windows CMD 中是否有与 bash 或 tcsh 中等效的源命令?

bash - 如何存储/*url* 的实际名称?

git - 如何将 Git 的分支名称添加到提交消息中?