我在外部服务器上的 ssh 终端中有一个正在运行的作业。我可以使用 暂停它,CTRL + Z
然后使用 恢复它fg
。但我想暂停它,运行 screen screen -S my_job
,然后使用 将其重新放在前面fg
。这不起作用。有没有办法做这样的事情?
原因是我的作业已经运行了相当长一段时间(1 个月),并且还要运行两个月。如果我的台式电脑因为停电而死机,我的作业就会被终止。
答案1
这里的问题是作业的控制终端。我不知道有什么方法可以更改控制终端,如果你想将程序移到屏幕上,就需要这样做。
但是,如果您的作业在其标准输入/输出/错误上没有重要的输入或输出,您可以考虑使用 shell 内置命令disown
,它将从活动作业表中删除后台作业。这意味着 shell 将不是当作业终止时(例如由于 ssh 主机的连接失败),向其发送 SIGHUP。例如:
$ long-running-job
^Z
$ bg
(shell displays backgrounding notification)
$ disown
您的作业应该可以继续运行。但是,它的 I/O 将被关闭,因此如果您有任何 stdin/stdout/stderr 活动,这不会有帮助。