如何重新进入后台运行的.sh脚本的交互环境?
如何重新进入后台运行的.sh脚本的交互环境?
嗨,我来帮你解决这个问题~你现在用nohup把脚本扔后台跑,但nohup本身只能让进程脱离终端存活,没法直接恢复交互会话。不过有几种办法能实现你的需求:
一、如果还没启动脚本(或可以重启脚本):用终端复用工具(推荐)
最靠谱的方式是用screen或者tmux这类终端复用工具,它们专门用来管理后台的交互会话,以后想随时回去都很方便:
用screen的步骤:
- 先创建一个命名会话:
screen -S my_script_session(my_script_session是自定义的会话名,方便以后识别) - 在这个会话里正常运行你的脚本:
./start.sh - 想要切回主终端让脚本后台跑?按
Ctrl+A+D组合键就能“detach”(脱离)会话,进程会在后台继续运行 - 之后想重新进入交互环境执行
/backup或/stop?直接跑screen -r my_script_session就能回到原来的会话窗口啦
用tmux的步骤(和screen类似,功能更强大):
- 创建命名会话:
tmux new -s my_script_session - 运行脚本后,按
Ctrl+B+D组合键脱离会话 - 重新连接会话:
tmux attach -t my_script_session
二、如果已经用nohup启动了脚本,没法重启:用reptyr补救
要是脚本已经在跑了不想重启,可以试试reptyr工具,它能把已经运行的进程“拽”到当前终端里:
- 先找到你的脚本进程的PID:运行
ps aux | grep start.sh,从输出里找到对应的数字PID - 安装reptyr(Ubuntu上直接用
sudo apt install reptyr) - 执行
reptyr <你的PID>,就能把那个后台进程的交互环境拉到当前终端里,之后就能输入命令啦
不过要注意,reptyr偶尔会因为进程的终端设置问题出现小异常,但大部分场景下都能正常工作。
备注:内容来源于stack exchange,提问作者Ciaran Crowley
相关产品推荐
相关产品推荐

