可在Linux中通过nohup、disown、screen、systemd用户服务等方法实现程序后台持久运行:nohup忽略SIGHUP并配合&启动;disown脱离shell控制;screen创建可分离会话;systemd用户服务支持开机自启与自动重启。

如果您希望在Linux系统中启动一个程序并使其在终端关闭后仍持续运行,则需要借助后台运行机制。以下是实现此目标的多种方法:
一、使用nohup命令配合&符号
nohup命令可使程序忽略SIGHUP信号,避免因终端断开而被终止;配合&符号可将进程置于后台执行。该组合适用于大多数长期运行的任务。
1、在终端中输入命令:nohup your_command &
2、按下回车键执行,系统将返回类似“[1] 12345”的进程编号提示
3、程序的标准输出和错误输出默认写入当前目录下的nohup.out文件
4、关闭终端后,进程仍持续运行
二、重定向nohup输出到指定文件
为便于日志管理,可将nohup产生的输出重定向至自定义文件,避免nohup.out堆积或覆盖。
1、执行命令:nohup your_command > output.log 2>&1 &
2、其中“> output.log”重定向标准输出,“2>&1”将标准错误合并至标准输出
3、该命令确保所有输出均写入output.log,且不影响后台运行特性
三、使用disown命令脱离shell控制
当程序已用&启动但未使用nohup时,可通过disown将其从当前shell作业表中移除,使其不受终端退出影响。
1、先以&方式启动程序:python3 server.py &
2、输入jobs命令查看作业列表,确认其作业号(如[1])
3、执行disown %1(假设作业号为1)
4、关闭终端后,该进程将继续运行,不再接收SIGHUP信号
四、结合screen工具创建持久会话
screen提供虚拟终端会话管理功能,允许用户分离(detach)和重新连接(attach)会话,适合交互式长期任务。
1、安装screen(如未安装):sudo apt install screen(Ubuntu/Debian)或sudo yum install screen(CentOS/RHEL)
2、新建命名会话:screen -S my_session
3、在会话中运行目标程序,如:./long_running_script.sh
4、按下Ctrl+A,再按D键分离会话
5、终端关闭后,会话仍在后台运行,可通过screen -r my_session恢复
五、使用systemd用户服务实现开机自启后台程序
对于需长期稳定运行且要求自动重启的程序,可注册为systemd用户服务,由系统服务管理器统一调度。
1、创建服务文件:~/.config/systemd/user/myapp.service
2、在文件中写入[Unit]、[Service]和[Install]段,其中ExecStart设为完整路径的可执行命令
3、启用服务:systemctl --user daemon-reload && systemctl --user enable myapp.service
4、启动服务:systemctl --user start myapp.service










