答案:在Linux中可通过多种方式让脚本后台运行。使用&符号可将脚本放入后台并获取PID;结合nohup能防止终端关闭影响执行,输出默认保存至nohup.out;利用screen创建可分离会话,实现会话恢复;配置systemd用户服务适合长期稳定运行的任务;已用&启动的作业可通过disown命令解除与终端关联,避免被终止。

如果您希望在Linux系统中执行一个耗时较长的任务,但又不想阻塞当前终端会话,可以让Shell脚本在后台运行。这样可以在不中断其他操作的情况下持续执行脚本任务。
本文运行环境:Dell XPS 13,Ubuntu 24.04
一、使用 & 符号启动后台任务
在命令末尾添加 & 符号,可以将脚本直接放到后台运行。这种方式适用于不需要与终端交互的脚本。
1、打开终端并导航到脚本所在目录。
2、输入命令 ./script.sh & 来启动脚本。
3、终端会返回一个进程ID(PID),可用于后续管理该任务。
二、结合 nohup 防止终端关闭影响运行
使用 nohup 命令可以忽略挂起信号(SIGHUP),即使关闭终端或退出登录,脚本仍将继续运行。
1、在终端中执行 nohup ./script.sh &。
2、输出默认会被重定向到 nohup.out 文件中,除非另行指定。
3、可通过 ps -ef | grep script.sh 查看进程状态。
三、使用 screen 创建可分离会话
screen 提供了一个虚拟终端环境,允许用户创建多个会话,并可在需要时重新连接。
1、安装 screen(如未安装):sudo apt install screen。
2、启动新会话:screen -S mysession。
3、在会话中运行脚本:./script.sh。
4、按 Ctrl+A 后再按 D 键即可分离会话。
5、重新连接使用:screen -r mysession。
四、使用 systemd 用户服务长期托管脚本
对于需要长时间稳定运行的脚本,配置为 systemd 服务是一种可靠方式。
1、创建服务文件:~/.config/systemd/user/myscript.service。
2、编辑内容包含 [Unit]、[Service] 和 [Install] 段落,设置 ExecStart 指向脚本路径。
3、启用服务:systemctl –user enable myscript.service。
4、启动服务:systemctl –user start myscript.service。
五、通过 disown 移除作业与终端关联
当脚本已在后台运行(使用 & 启动),可通过 disown 命令将其从当前 shell 的作业表中移除,避免终端关闭时被终止。
1、先运行脚本:./script.sh &。
2、查看当前后台作业:jobs。
3、执行 disown %1(%1 为作业编号)解除关联。

路由网











