You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

能否暂停并恢复screen会话中运行的长时间执行命令?

在Screen会话中暂停并恢复长时间运行的命令是否可行?

当然可行!这正是Unix/Linux系统进程管理和Screen这类终端复用工具的强大之处——我自己也经常这么干,跑批量数据处理或者长时间计算任务时,中途临时要跑个别的算力密集型操作,完全不用中断已经跑了好几天的进程。下面给你一步步说具体操作:

操作步骤

  • 暂停目标进程
    先确保你的Screen会话焦点在运行那个7天命令的终端窗口上(如果开了多个Screen窗口,用Ctrl+a + n切换到下一个,Ctrl+a + p切换到上一个)。然后按下Ctrl+z,这个快捷键会把当前前台进程暂停并放到后台,你会看到类似这样的系统提示:

    [1]+ Stopped your-long-running-command

  • 验证暂停状态(可选)
    输入jobs命令,能看到后台暂停的进程列表,确认目标进程确实处于Stopped状态。要是担心不小心误触把它拉回前台,也可以用bg %1(这里的%1jobs输出里的进程编号)把它转到后台暂停状态,不过其实Ctrl+z之后已经是暂停状态了,这步看个人习惯。

  • 执行其他密集型任务
    现在你就可以在同一个Screen会话里(或者用Ctrl+a + c新开一个窗口)放心运行你的计算密集型操作了——暂停的进程会完全停止占用CPU资源,只会保留占用的内存,不会和新任务抢算力。

  • 恢复原命令运行
    等你忙完其他任务,想恢复那个跑了7天的命令时,输入fg %1(把%1换成jobs里显示的对应进程编号);如果只有这一个后台暂停进程,直接输入fg就行,进程会立刻回到前台继续之前的运行状态,完全不会丢失进度。

关键注意事项

  • 别随便关闭Screen会话:如果你需要暂时离开终端,记得用Ctrl+a + d detach会话,之后再用screen -r重新连接。要是直接关闭终端退出Screen,没做特殊配置的话,后台进程可能会收到SIGHUP信号被终止,那7天的运行就白费了!
  • 文件IO安全:如果你的命令正在读写文件,暂停再恢复完全没问题,系统会自动维护进程的IO状态,只要你别手动修改它正在操作的文件就行。
  • 内存占用:暂停的进程会保留它已经占用的内存,要是你的系统内存紧张,可能需要留意一下,但一般来说只要不是极端情况,都不会有问题。

内容的提问来源于stack exchange,提问作者Eric McLachlan

火山引擎 最新活动