由于日常工作均使用linux系统,一般对于已经知道运行时间很长的命令的话,都会使用nohup,screen或者tmux等来运行命令,但是有时候在运行命令后突然发现该命令运行时间非常长,那么有没有什么方法能够继续在当前shell工作,以及后续登出后命令能够保持运行到任务结束。经过一番搜索后,找到了解决办法,在此做个记录。 在类Unix系统中,管理后台作业是提高工作效率的重要技能。本文将指导您如何使用Ctrl+Z、bg和disown命令将正在运行的作业移到后台,并确保在注销后它们能够继续运行。

主要步骤:

  • 使用Ctrl+Z暂停作业:
  • 使用bg将作业移到后台:
  • disown命令在注销后保持作业运行

使用Ctrl+Z暂停作业:

当作业在前台运行时,也就是一时不小心运行了一个长时间运行的命令后,首先使用Ctrl+Z键盘快捷键(同时按住)将其暂停。这将暂停作业并将控制权返回给Shell。

使用bg将作业移到后台:

一旦作业被暂停,您可以使用bg命令将其移到后台运行。bg命令会重新启动作业,并允许它在您处理其他任务时继续运行。 要将暂停的作业移到后台,请按照以下步骤操作:

获取job编号

使用jobs命令

jobs
# [1] + suspended python insert.py

可以看到暂停的任务为python insert.py,最前面的是命令编号,此处为1

命令迁移到后台

要将编号为1的作业移到后台,运行bg %1。

bg %1
# [1] + running python insert.py

命令从暂停状态恢复运行

使用disown命令在注销后保持作业运行:

默认情况下,在类Unix系统中注销时,与您的Shell会话关联的所有正在运行的作业都会被终止。但是,我们可以使 用disown命令将作业从Shell的作业控制中移除,使其父进程交给出事程序, 就能在注销后继续保持运行。

要将作业移出Shell并在注销后继续运行,只需要命令编号,前面可以知道是1,那么运行

disown %1

就可以了。该命令没有返回,但是重新运行jobs后可以看到已经不见了,说明成功。 一旦作业被移出Shell,即使您注销系统,它也将继续运行。 但请注意,您将无法使用Shell的作业控制功能来控制或监视作业。

结论:

在类Unix系统中管理后台作业对于多任务处理和优化工作效率至关重要。首先通过使用Ctrl+Z暂停作业、然后使用bg将其移到后台以及disown命令将其与Shell分离,您可以确保作业在注销后继续运行。

请记住,如果需要,要重定向作业的输出,并考虑使用像screen或tmux这样的工具来进行更高级的作业管理。