在 Unix(特别是 Linux)上,我在常规 ssh->bash 会话中开始了工作。我想尽快下班,但我现在意识到这项工作需要几个小时。
如果我刚刚在屏幕上开始这项工作,我可以分离并回家。但我没有。
有什么方法可以断开作业与其 ssh 会话的连接,这样我就可以关闭我的计算机(断开 TCP 连接并终止 ssh 会话),但让程序继续运行?
我不关心它的输出——事实上,我将标准输出重定向到一个文件。我只想让它运行完成。
在 Unix(特别是 Linux)上,我在常规 ssh->bash 会话中开始了工作。我想尽快下班,但我现在意识到这项工作需要几个小时。
如果我刚刚在屏幕上开始这项工作,我可以分离并回家。但我没有。
有什么方法可以断开作业与其 ssh 会话的连接,这样我就可以关闭我的计算机(断开 TCP 连接并终止 ssh 会话),但让程序继续运行?
我不关心它的输出——事实上,我将标准输出重定向到一个文件。我只想让它运行完成。
您可以按
ctrl-z
中断进程,然后运行bg
以使其在后台运行。您可以使用 显示以这种方式作为背景的所有进程的编号列表
jobs
。然后您可以运行
disown %1
(替换1
为 输出的进程号jobs
)以将进程与终端分离。尽管名称如此,但运行后该进程仍将归您所有
disown
,它将与您启动它的终端分离。这个答案有更多信息
我相信您正在寻找的命令是“否认”
利用
是美丽的:
并退出此终端,继续执行任务...
从您的 bash shell 中:
然后,继续在后台运行作业:
稍后,您可以键入
jobs
以查看您的进程是否仍在运行。在屏幕内使用reptyr时,您可以将进程(或其输出)移动到屏幕中。
当我连接到我经常使用的主机时,我已经设置
screen
为自动运行,以避免这个问题。http://tlug.dnho.net/?q=node/239是一种方法,尽管还有其他变体。
当我在会话中意外断开连接时救了我一两次,否则
screen
在我开始冗长的事情之前会忘记开始。在运行命令时使用 crtl-Z 然后 bg 或使用 & 在 100% 时不可靠。它在大多数情况下都可以工作,但在某些情况下可能无法按预期工作(I/O 使用,...)。
屏幕是一个可靠的解决方案。
如果您使用的是 bash,您可以怀疑使用 control-Z 和使用 bg 的背景。
作业控制(来自 man bash)
帮助
帮助工作
如果您事先知道要让它在后台运行,那么 unix 命令at是一个不错的选择。它在预定时间在后台启动命令,就像不重复的 cron 作业一样。根据您的发行版,您可能需要安装它并启动 atd 守护程序。