使用 Nohup Linux 命令在 SSH 注销后保持命令运行使用 Nohup Linux 命令在 SSH 注销后保持命令运行使用 Nohup Linux 命令在 SSH 注销后保持命令运行使用 Nohup Linux 命令在 SSH 注销后保持命令运行
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

使用 Nohup Linux 命令在 SSH 注销后保持命令运行

本文将向您展示如何使用 nohup 命令启动进程并使其在注销后保持运行。

Nohup 代表“不挂断”。这是一个非常有用的命令,即使在您注销后也可以让您的进程继续运行。

最常见的用途之一是通过 SSH 连接运行耗时的命令。如果您认为您的 SSH 会话可能会中断,您可以按以下方式使用带有 nohup 的命令:

nohup your_command &

nohup 命令是什么?

Nohup 可以看作是一个包装器。您可以在命令前加上 nohup 前缀,如下所示:

nohup COMMAND ARGS ....

Nohup的目的是拦截并防止SIGHUP信号到达 >命令。

当您的命令带有 nohup 前缀时,输入将从 /dev/null 重定向( nohup COMMAND dev/null )。简而言之,如果您需要向该命令发送输入,请不要使用 nohup 调用该命令。当您nohup命令时,它需要能够在无人值守的情况下运行。

Nohup 将首先尝试将输出重定向到 ./nohup.out 或如果需要的话,会将其发送到~/nohup.out。您还可以决定将输出重定向到何处,如下所示:

nohup COMMANDS >/path/to/output/file

关于nohup没什么好说的,它没有一长串选项。只有-帮助和-版本。

使用 nohup 命令的示例

使用 nohup 执行脚本就这么简单。

nohup ./nhp.sh

请注意,nohup 并未将进程分叉到后台。 Nohup仅用于拦截SIGHUP信号。命令运行后,您可以继续并关闭终端。它会警告您有一个进程正在运行。确认你想杀死它。

当您关闭终端时,所有子进程都会收到 SIGHUP 信号。 Nohup 阻止该信号到达我的命令。下图显示了终端仍在运行时有关我的命令的进程信息。

你看到 PPID 了吗?那是父进程ID。当您请求关闭终端时,PPID 的所有子级都会收到 SIGHUP 信号。 Nohup 阻止该信号到达我们的脚本。父进程终止,我们的脚本被孤立。当一个进程成为孤立进程时,它会自动分配 1(systemd 或 init)作为父进程。

正如您所看到的,演示 nohup 的使用并不难。非常简单的命令。您可以像这样在后台分叉该进程:

nohup ./nhp.sh &

您还可以决定输出重定向到哪里,如下所示:

nohup ./nhp.sh >/path/to/file &

请注意,如果关闭或重新启动 Linux 系统,它将终止该命令。当您请求关闭或重新启动时,所有进程都会收到 SIGTERM,然后收到 SIGKILL。这些信号不会被 nohup 拦截。

通过 SSH 连接的 Nohup

当您学习 nohup 时,经常立即想到的一个用途是能够通过 SSH 在远程计算机上启动进程。从逻辑上讲,使用 nohup 运行命令将允许您从 SSH 连接注销,并且该进程仍将运行。

nohup COMMAND &

一个常见的问题是有时 SSH 在注销时会“挂起”。这是因为 SSH 通常会拒绝丢失进出任何后台进程的任何数据流。然后它将“挂起”直到进程终止。

通常可以通过重定向所有 3 个数据流来解决此问题。

nohup COMMAND >./nohup.out 2>./nohup.err &

我希望这篇简短的文章可以帮助您更好地使用 SSH 会话。如果您有疑问或建议,请在下方留言。

©2015-2025 艾丽卡 support@alaica.com