使Ubuntu命令或进程后台运行且关闭终端无影响

使用 nohup 命令和 & 符号

在 Ubuntu 中,你可以使用 nohup 命令和 & 符号来使一个命令在后台运行,并且关闭终端不会对它产生影响。这是一个常见的用法,特别是在运行长时间的进程或服务时。

以下是如何使用 nohup& 运行一个命令:

  1. 打开终端。
  2. 输入你想要在后台运行的命令,然后在命令的末尾添加 & 符号。例如:
1
nohup your-command-to-run &

请将 your-command-to-run 替换为你要在后台运行的实际命令。

  1. 按下 Enter 键来运行该命令。现在,该命令将在后台运行,并且你可以关闭终端而不会影响它。
  2. 命令的输出将被重定向到一个名为 nohup.out 的文件,它将保存在当前目录中。你可以使用文本编辑器查看这个文件,或者使用其他适当的方式处理输出。

注意事项:

  • 使用 nohup& 运行的命令将继续运行,直到完成或者手动停止。你可以使用 kill 命令来停止它。
  • 如果你的命令需要输入或输出,你可能需要考虑使用适当的重定向,以确保输入和输出正确地处理。
  • 在某些情况下,你可能还需要考虑设置环境变量,以确保命令能够正常运行。
  • 请小心在后台运行长时间运行的命令,以确保它们不会消耗过多的系统资源。

使用disown 命令

如果使用 nohup& 后命令仍然在关闭终端时终止,可能有以下原因:

  1. SIGHUP 信号问题: 默认情况下,终端关闭时会向后台作业发送 SIGHUP 信号,这可能会导致它们终止。nohup 通常用于忽略 SIGHUP 信号,但仍然可能存在一些情况。
  2. Shell 特定问题: 在某些情况下,shell 的配置可能影响后台作业的行为。这通常不太常见,但可能会发生。

为了确保命令在后台运行而关闭终端不会影响它,你可以考虑使用 disown 命令,这将断开终端对该进程的关联。以下是使用 disown 的步骤:

  1. 打开终端并运行你的命令,后面加上 & 使其在后台运行,例如:
1
your-command-to-run &
  1. 在终端中运行 jobs 命令,以查看正在运行的作业的列表。这将显示你的命令及其作业号。
  2. 运行 disown 命令,后跟作业号,如下所示:
1
disown %1

这里 %1 是你的命令的作业号,确保将其替换为你的实际作业号。

现在,你的命令应该在后台运行,并且即使关闭终端也不会终止。请注意,此方法仅对当前会话中的命令有效,如果你注销或重新启动系统,作业可能会受到影响。如果需要更稳定的后台运行,可以考虑使用工具如 screentmux,它们允许你创建持久的会话并在其中运行命令。