在 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
:适合已经在运行的后台任务。