Adrián Arroyo Calle Asked: 2020-02-15 10:12:04 +0800 CST 2020-02-15 10:12:04 +0800 CST 2020-02-15 10:12:04 +0800 CST 关闭 SSH 会话时如何保持进程打开? 772 事实证明,我有一个过程,我想无限期地保持开放。如果我从 SSH 启动进程,退出 SSH 会话也会终止进程。 我想知道即使我退出 SSH 会话,该进程如何保持运行。 linux 4 Answers Voted Best Answer Cuauhtli 2020-12-04T05:01:49+08:002020-12-04T05:01:49+08:00 说明: tmuxscreen它们主要不是为了你想要的,它们分别是多路复用器和终端仿真器。允许您保持进程在远程服务器上运行并不是它的主要功能。仅将它们用于此目的是未充分利用它们并在远程服务器上留下太多程序运行。 与@patapalo 所说的相反,“&”字符在注销后不会保持进程打开。它所做的是将它传递到后台,允许运行它的 shell 继续工作。如果关闭 ssh 连接,此过程将停止。 您需要的是nohup为此设计的程序。 nohup的运行方式如下: nohup ./programa & 它nohup的作用是让程序忽略 SIGHUP 信号。当您运行一个程序然后退出终端时,即使您在后台运行它,./programa &程序也会收到一个 SIGHUP 信号,该信号会暂停程序的执行。相反,nohup尽管关闭 ssh 会话或发送类似kill -1 pid_del_programa. 要杀死它,您只需要杀死与程序关联的进程,或者使用 kill (当然,只要您不发送 1 或 signal SIGHUP)或使用某些进程查看器等。 moscoquera 2020-02-15T10:41:26+08:002020-02-15T10:41:26+08:00 您可以使用以下命令运行该过程screen: SCREEN comando Argumentos 然后你做一个分离screen按Ctrl+A然后Ctrl+ D。 然后,您可以关闭 SSH 会话。 César 2020-02-16T06:00:16+08:002020-02-16T06:00:16+08:00 我建议您使用tmux( terminal multiple x er ),它更现代并且比screen. 优势 根据常见问题解答: 使用客户端-服务器模型 不同的命令界面 可以扩展 可以限制窗口的大小 有搜索支持 窗口划分(拆分)的模型不同。tmux它有两个对象,窗口和面板;screen它只有窗户。 利用 请注意,您必须tmux在通过 SSH 连接的服务器上运行,在示例中我假设您已经连接。 默认情况下,它tmux使用Ctrl+组合b作为执行命令的快捷方式,但对于示例,我将使用不带快捷方式的命令。 最好命名您的会话以维护顺序,通过以下简单示例,您可以创建一个新会话: $ tmux new -s prueba 好吧,现在你有一个会话,即使在注销后你也可以返回并找到你离开它的所有内容,让我们通过运行一个简单的命令来测试它: $ pwd /home/cesar 退出会话(分离): $ tmux detach 您应该回到创建会话的起点: $ tmux new -s prueba [detached] $ 您可以看到活动会话: $ tmux ls prueba: 1 windows (created Mon Feb 15 08:32:51 2016) [151x36] 重新进入会话(附加): $ tmux attach -t prueba 现在你应该找到上次留下的东西(包括 command tmux detach): $ pwd /home/cesar $ tmux detach $ 如果要结束会话(杀死): $ tmux kill-session -t prueba 不应再有会话: $ tmux ls failed to connect to server 好吧,这些是显示 的好处的一些基本命令,尽管正如我上面提到的,使用带有+tmux的快捷方式使用命令会更快。Controlb 参考 官方网站 手动的 GitHub存储库 patapalo 2020-05-05T12:52:51+08:002020-05-05T12:52:51+08:00 我得到一个命令,通过在末尾添加一个 & 来继续执行。 我认为这就像告诉它在后台运行而不是在 ssh shell 中运行 例如 java -jar xxx.jar &
说明:
tmux
screen
它们主要不是为了你想要的,它们分别是多路复用器和终端仿真器。允许您保持进程在远程服务器上运行并不是它的主要功能。仅将它们用于此目的是未充分利用它们并在远程服务器上留下太多程序运行。与@patapalo 所说的相反,“&”字符在注销后不会保持进程打开。它所做的是将它传递到后台,允许运行它的 shell 继续工作。如果关闭 ssh 连接,此过程将停止。
您需要的是
nohup
为此设计的程序。nohup的运行方式如下:
它
nohup
的作用是让程序忽略 SIGHUP 信号。当您运行一个程序然后退出终端时,即使您在后台运行它,./programa &
程序也会收到一个 SIGHUP 信号,该信号会暂停程序的执行。相反,nohup
尽管关闭 ssh 会话或发送类似kill -1 pid_del_programa
.要杀死它,您只需要杀死与程序关联的进程,或者使用 kill (当然,只要您不发送 1 或 signal
SIGHUP
)或使用某些进程查看器等。您可以使用以下命令运行该过程
screen
:然后你做一个分离
screen
按Ctrl+A然后Ctrl+ D。然后,您可以关闭 SSH 会话。
我建议您使用
tmux
( terminal multiple x er ),它更现代并且比screen
.优势
根据常见问题解答:
tmux
它有两个对象,窗口和面板;screen
它只有窗户。利用
请注意,您必须
tmux
在通过 SSH 连接的服务器上运行,在示例中我假设您已经连接。默认情况下,它
tmux
使用Ctrl+组合b作为执行命令的快捷方式,但对于示例,我将使用不带快捷方式的命令。最好命名您的会话以维护顺序,通过以下简单示例,您可以创建一个新会话:
好吧,现在你有一个会话,即使在注销后你也可以返回并找到你离开它的所有内容,让我们通过运行一个简单的命令来测试它:
退出会话(分离):
您应该回到创建会话的起点:
您可以看到活动会话:
重新进入会话(附加):
现在你应该找到上次留下的东西(包括 command
tmux detach
):如果要结束会话(杀死):
不应再有会话:
好吧,这些是显示 的好处的一些基本命令,尽管正如我上面提到的,使用带有+
tmux
的快捷方式使用命令会更快。Controlb参考
我得到一个命令,通过在末尾添加一个 & 来继续执行。
我认为这就像告诉它在后台运行而不是在 ssh shell 中运行
例如 java -jar xxx.jar &