如何在后台已经 运行 的进程上使用 nohup

How to use nohup on a process already running in background

所以我在我的 unix 终端的后台有一份工作 运行,我将不得不在一段时间后关闭 ssh 终端,然后我的工作也必须继续。我如何使用 nohup 或任何其他可能的选项来实现此目的。

nohup 开始一个新进程。您不能将其追溯应用到您已经开始的流程。

但是,如果您从中启动作业的 shell 是 bashkshzsh,则 disown 作业控制内置可以提供你想要的。它可以将作业完全从作业控制中删除,或者只是将作业标记为在父 shell 本身收到作业时不发送 SIGHUP。这与通过 nohup 命令启动进程的效果类似,但不一定相同。

请注意,如果任何标准流连接到会话的终端,您的作业可能仍然存在问题。这是 nohup 通常先发制人地破坏的东西,但 disown 不能在事后修改。通常情况下,您最好预料到这种需求并从 nohup 开始这个过程,但如果您没有那么有远见,那么 disown 可能是您的下一个最佳选择。

另请注意,作为作业控制命令,disown 采用作业规范来标识要操作的作业,而不是进程 ID。如有必要,您可以使用 jobs 内置函数来帮助确定合适的作业规范。