linux - 如何在已经在后台运行的进程上使用 nohup
问题描述
所以我有一份工作在我的 unix 终端上在后台运行,一段时间后我将不得不关闭 ssh 终端,之后我的工作也必须继续。我如何使用 nohup 或任何其他可能的选项来实现这一点。
解决方案
nohup
开始一个新的过程。您不能追溯将其应用于您已经开始的流程。
但是,如果您从中启动作业的 shell 是bash
, ksh
,或者内置zsh
的disown
job-control 可能会提供您想要的。它可以完全从作业控制中删除作业,也可以SIGHUP
在父 shell 本身收到作业时标记作业不发送。nohup
这与通过命令启动进程的效果相似,但不一定相同。
请注意,如果任何标准流连接到会话的终端,您的工作可能仍然存在问题。这nohup
通常会先发制人地破坏,但disown
事后无法修改。通常,您最好先预测这种需求并从 开始该过程nohup
,但如果您不那么有远见,那么disown
可能是您的下一个最佳选择。
另请注意,作为作业控制命令,使用disown
作业规范来标识要操作的作业,而不是进程 ID。如有必要,您可以使用jobs
内置函数来帮助确定适当的作业规范。
推荐阅读
- c# - 我们可以将特定的 PDF 数据提取到 Excel 中吗
- c# - 我想显示我的线程将在 C# 控制台应用程序中再次运行多少次
- tensorflow - 生产、后端或前端的深度学习模型?
- iot - Windows 设备门户 - 安装应用程序不可见
- google-apps-script - 如何在 Google Apps Script 上只选中一个而不是两个?
- android - Firebase Phone Auth:白名单真实号码是否会导致发送短信?
- svn - pysvn import_pysvn._pysvn_3_6.ClientError:导入文件时需要新的条目名称
- botframework - 为什么 Bot 框架中的语言会自动更改?
- javascript - 双括号 ()() 如何在 JavaScript 中工作?
- google-cloud-platform - 如何使用google提供的模板[pubsub to Datastore]?