使用nohup顺序执行Python脚本如何不占用当前shell进程
解决方案
方法1:整体批处理脚本后台运行(最简便)
你不需要修改原有循环的内部逻辑,只需要把整个批量执行流程作为独立脚本整体丢到后台运行即可,既可以保证内部任务按顺序执行,又不会占用当前shell:
- 第一步:将你现有的循环代码保存为独立的脚本文件,例如
run_all_tasks.sh,内容和你当前的shell代码完全一致即可。 - 第二步:给脚本添加执行权限:
chmod +x run_all_tasks.sh
- 第三步:执行以下命令将整个批处理脚本后台运行:
nohup ./run_all_tasks.sh >> nohup.out 2>&1 &
原理说明:你之前的问题是将&加在单条Python命令后面,才会导致单条任务后台立刻进入下一轮循环。现在是把整个批量任务流作为一个整体丢到后台,脚本内部的所有命令依然是同步顺序执行的,会等前一个main.py运行结束才会执行下一轮循环,完全满足你「先打印运行提示、等脚本跑完再打印完成提示、所有参数组合按顺序执行」的要求。
运行后你可以在当前shell执行其他任意操作,关闭终端也不会中断任务,执行jobs命令可以查看当前shell后台的任务状态,所有任务的运行日志会按你原有配置分别写入对应的${request}_${factor}_${size}.log文件,运行状态记录会写入nohup.out。
方法2:使用终端会话管理工具(适合需要随时查看运行进度的场景)
你可以用screen或者tmux这类终端会话管理工具,创建独立的后台会话运行任务,随时可以切回会话查看实时输出:
以screen为例操作步骤如下:
- 若未安装screen,先执行对应命令安装:
- Debian/Ubuntu系统:
apt install screen - CentOS/RHEL系统:
yum install screen
- Debian/Ubuntu系统:
- 创建新的后台会话:
screen -S task_batch - 在弹出的新会话中直接运行你原本的脚本即可,不需要加任何
& - 按快捷键
Ctrl+A再按D,即可 detach 会话回到原来的shell,此时任务会在后台会话中继续正常运行 - 后续需要查看任务进度时,执行
screen -r task_batch即可回到会话查看实时输出
内容的提问来源于stack exchange,提问作者AndW
相关产品推荐
相关产品推荐

