首页 > 解决方案 > 如何在已经在后台运行的进程上使用 nohup

问题描述

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

标签: linuxunixnohup

解决方案


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

但是,如果您从中启动作业的 shell 是bash, ksh,或者内置zshdisownjob-control 可能会提供您想要的。它可以完全从作业控制中删除作业,也可以SIGHUP在父 shell 本身收到作业时标记作业不发送。nohup这与通过命令启动进程的效果相似,但不一定相同。

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

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


推荐阅读