在 Linux 或类 Unix 系统中,通常我们会在终端中运行一些命令或脚本。然而,当我们关闭终端时,这些命令可能会被终止。为了避免这种情况发生,我们可以使用一些工具和方法来确保命令在后台运行,并且即使关闭终端也不会终止。
nohup 命令nohup 是 "no hangup" 的缩写,它可以让程序忽略挂起(SIGHUP)信号,从而在终端关闭后继续运行。
使用 nohup 启动命令。
nohup your_command &
your_command 是你想要运行的命令。& 表示将命令放入后台运行。查看输出日志。
默认情况下,nohup 会将标准输出和标准错误重定向到 nohup.out 文件中。你可以通过以下命令查看日志:
tail -f nohup.out
检查进程是否仍在运行。
使用 ps 或 pgrep 命令检查进程状态:
ps aux | grep your_command
nohup python my_script.py &
上述命令将在后台运行 my_script.py 脚本,并将其输出保存到 nohup.out 文件中。
screen 工具screen 是一个终端复用工具,可以创建多个虚拟终端会话。即使关闭当前终端,screen 中的会话仍然保持活动状态。
安装 screen(如果尚未安装)。
sudo apt-get install screen # Debian/Ubuntu
sudo yum install screen # CentOS/RHEL
创建一个新的 screen 会话。
screen -S session_name
session_name 是你为会话命名的名字。在 screen 会话中运行你的命令。
your_command
挂起 screen 会话。
按下 Ctrl+A 然后按 D 键,这将使会话脱离并返回到原始终端。
查看所有 screen 会话。
screen -ls
重新连接到某个会话。
screen -r session_name
screen -S my_python_session
python my_script.py
# 按 Ctrl+A 然后 D 挂起会话
disown 命令disown 是 Bash 内置命令,用于从当前 shell 的作业表中移除任务,从而使任务不受 SIGHUP 信号的影响。
将命令放入后台运行。
your_command &
使用 disown 移除任务。
disown %1
%1 是任务编号,可以通过 jobs 命令查看。关闭终端后,任务将继续运行。
python my_script.py &
disown %1
tmux 工具tmux 是另一个强大的终端复用工具,类似于 screen,但功能更强大。
安装 tmux(如果尚未安装)。
sudo apt-get install tmux # Debian/Ubuntu
sudo yum install tmux # CentOS/RHEL
创建一个新的 tmux 会话。
tmux new -s session_name
在 tmux 会话中运行你的命令。
your_command
挂起 tmux 会话。
按下 Ctrl+B 然后按 D 键,这将使会话脱离并返回到原始终端。
查看所有 tmux 会话。
tmux ls
重新连接到某个会话。
tmux attach -t session_name
tmux new -s my_python_session
python my_script.py
# 按 Ctrl+B 然后 D 挂起会话
nohup:简单易用,适合短时间运行的任务。screen 和 tmux:功能强大,适合长时间运行的任务,支持多窗口管理。disown:适合已经在运行的后台任务。