在类Unix系统中管理长时间任务
由于日常工作均使用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这样的工具来进行更高级的作业管理。
- 原文作者:春江暮客
- 原文链接:https://www.bobobk.com/861.html
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。