Linux服务器SSH客户端断开后保持程序继续运行的方法

目录

[1. nohup 命令:](#1. nohup 命令:)

[2. tmux 或 screen:](#2. tmux 或 screen:)

[3 final shell 断开后服务器如何继续执行令?](#3 final shell 断开后服务器如何继续执行令?)

[方法一:使用 nohup 命令](#方法一:使用 nohup 命令)

方法二:将命令放在后台执行

[4 你可以使用 jobs 命令查看当前终端中正在后台运行的任务](#4 你可以使用 jobs 命令查看当前终端中正在后台运行的任务)

[(1) 查看后台作业:](#(1) 查看后台作业:)

(2)将作业移动到前台:

[(3) 将作业放到后台:](#(3) 将作业放到后台:)

(4)终止后台作业

[5 如果你使用了 nohup 或者在终端关闭后重新连接到服务器,如何管理后台任务?](#5 如果你使用了 nohup 或者在终端关闭后重新连接到服务器,如何管理后台任务?)

[(1)ps 命令:](#(1)ps 命令:)

[(2)pgrep 命令:](#(2)pgrep 命令:)

[(3)pkill 命令:](#(3)pkill 命令:)

[(4)tmux 或 screen:](#(4)tmux 或 screen:)


如果你使用SSH连接到Linux服务器,并且希望在断开SSH连接后继续运行程序,例如深度学习训练模型需要长时间周期进行, 在这期间如果退出服务器客户端或者网页连接,服务器Linux系统会自动关闭所有进程,程序也会随之终止运行(被挂起),你可以使用以下几种方法保证在客户端ssh断开连接后,服务器执行的命令不中断:

1. nohup 命令:

使用nohup命令可以在后台运行程序,而且在SSH连接断开后仍然保持运行。示例:

复制代码
nohup your_command &

这会将your_command命令在后台运行,并将输出写入nohup.out文件。你可以使用jobs命令来查看后台任务,或者使用ps aux | grep your_command来查看特定命令的运行情况。

2. tmux 或 screen:

使用tmuxscreen是一种更强大的方法,它允许你创建和管理终端会话,而不受SSH连接断开的影响。你可以在tmuxscreen会话中运行你的程序,然后在需要的时候重新连接到会话。示例:

  • 对于 tmux:

    tmux

    在 tmux 会话中运行你的程序

    your_command

    按下 Ctrl-b,然后按下 d 来断开 tmux 会话

对于 screen:

复制代码
screen
# 在 screen 会话中运行你的程序
your_command
# 按下 Ctrl-a,然后按下 d 来断开 screen 会话

选择使用nohuptmuxscreen取决于你的偏好和需求。tmuxscreen还提供了许多其他功能,例如在多个窗格中同时运行不同的命令。

3 final shell 断开后服务器如何继续执行令?

在Linux中,当你在终端中执行一个命令,并且希望在终端关闭后该命令继续执行,你可以使用 nohup 命令,或者将命令放在后台执行。下面是两种常用的方法:

方法一:使用 nohup 命令

复制代码
nohup your_command > output.log 2>&1 &
  • your_command 是你要执行的命令。
  • output.log 是命令输出的日志文件,可以省略。

此命令将 your_command 在后台执行,并将输出写入 output.log 文件。nohup 命令会忽略挂断(hangup)信号,从而使命令在终端关闭后继续执行。

方法二:将命令放在后台执行

复制代码
your_command &

在命令末尾加上 & 符号,将命令放在后台执行。这样在终端关闭后,命令仍然在后台继续执行。你可以使用 jobs 命令查看后台任务。

请注意,这两种方法都可以在终端关闭后使命令继续执行,但在某些情况下,你可能还需要考虑输出和错误信息的重定向,以及可能产生的日志。

4 你可以使用 jobs 命令查看当前终端中正在后台运行的任务

这个命令会列出当前终端会话中的作业(jobs)信息,包括作业编号、作业状态以及相关的命令。以下是一些常用的 jobs 命令选项:

(1) 查看后台作业:

复制代码
jobs

(2)将作业移动到前台:

复制代码
fg %job_number

使用这个命令,你可以将指定编号的作业移动到前台运行。

(3) 将作业放到后台:

复制代码
bg %job_number

这个命令可以将指定编号的作业从前台移到后台运行。

(4)终止后台作业

复制代码
kill %job_number

使用这个命令可以终止指定编号的后台作业。

在上述命令中,%job_number 是作业的编号,可以使用 jobs 命令查看。

请注意,这些命令在当前终端会话中有效。如果你使用了 nohup 或者在终端关闭后重新连接到服务器,你可能需要使用其他方式来管理后台任务,比如使用 ps 或者其他作业控制工具。

5 如果你使用了 nohup 或者在终端关闭后重新连接到服务器,如何管理后台任务?

如果你在终端关闭后重新连接到服务器,可能需要使用其他工具来管理后台任务,因为 jobs 命令只能查看当前终端会话中的作业。以下是一些其他用于管理后台任务的工具和命令:

(1)ps 命令:

使用 ps 命令可以列出当前正在运行的进程。你可以使用以下命令来查找特定的进程:

复制代码
ps aux | grep your_command

这会列出包含 your_command 的所有进程。通过查看进程的PID(进程ID),你可以确定后台任务的运行情况。

(2)pgrep 命令:

pgrep 命令可以通过进程名来查找进程的PID。例如

复制代码
pgrep your_command

这将返回包含 your_command 的所有进程的PID。

(3)pkill 命令:

使用 pkill 命令可以通过进程名终止进程。例如:

复制代码
pkill your_command

这将终止所有包含 your_command 的进程。

(4)tmux 或 screen:

如果你在使用 tmuxscreen,你可以使用相应的命令来查看和管理后台会话。例如,在 tmux 中,你可以使用以下命令:

复制代码
tmux list-sessions

这会列出所有 tmux 会话,你可以重新连接到其中一个会话以查看和管理后台任务。

这些命令和工具可以帮助你在终端关闭后重新连接到服务器时查看和管理之前在后台运行的任务。

相关推荐
宴之敖者、15 小时前
Linux——\r,\n和缓冲区
linux·运维·服务器
LuDvei15 小时前
LINUX错误提示函数
linux·运维·服务器
未来可期LJ15 小时前
【Linux 系统】进程间的通信方式
linux·服务器
Abona15 小时前
C语言嵌入式全栈Demo
linux·c语言·面试
心理之旅15 小时前
高校文献检索系统
运维·服务器·容器
Lenyiin15 小时前
Linux 基础IO
java·linux·服务器
The Chosen One98516 小时前
【Linux】深入理解Linux进程(一):PCB结构、Fork创建与状态切换详解
linux·运维·服务器
Kira Skyler16 小时前
eBPF debugfs中的追踪点format实现原理
linux
2501_9277730717 小时前
uboot挂载
linux·运维·服务器
wdfk_prog17 小时前
[Linux]学习笔记系列 -- [drivers][dma]dmapool
linux·笔记·学习