因此,我有一个在unix终端上在Background中运行的作业,一段时间后,我将不得不关闭ssh终端,在那之后我的工作也必须继续。我如何使用nohup或任何其他可能的选项来实现此目的。

最佳答案

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

但是,如果您从中启动作业的Shell是bashkshzsh,则内置的disown作业控件可能会提供所需的内容。它可以将作业完全从作业控制中删除,也可以仅在父外壳本身收到作业时将作业标记为不发送SIGHUP。这与通过nohup命令启动进程的效果类似,但不一定相同。

请注意,如果作业的任何标准流连接到会话的终端,您的作业仍可能会出现问题。这通常是nohup抢先的东西,但是disown在此之后不能进行修改。通常,最好是预见到这种需求,并以nohup开始该过程,但是如果您不那么有远见,那么disown可能是您的下一个最佳选择。

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

10-07 19:16
查看更多