我必须使用 x2go 在共享工作站上运行一些程序。
这些程序需要相当长的时间,我希望:
- 在 x2go 中启动程序
- 登出
- 一段时间后使用 x2go 再次连接到机器并查看程序的结果
所以,最后,我想做的与人们可以用screen
. 但是,似乎注销会杀死所有正在运行的程序。
这些程序使用 Mathematica,特别是它的一些动态内置函数,所以我需要访问 X 服务器才能与 GUI 交互,这不是screen
一个选项。
如果需要,我的电脑和工作站都使用 Ubuntu。命令cat /etc/os-release
给出:
我的电脑
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
工作站
PRETTY_NAME="Ubuntu 22.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.2 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
它不能按照您建议的方式完成:
正如您所发现的,当 GUI 会话结束时,显示服务器将终止(不是挂起或隐藏),所有子作业也将终止。该行为是注销的基础。
即使你做了一些花哨的事情(比如
nohup
)让你的窗口保持活动状态,它也会立即出错,因为不再显示了。面对这种情况的开发人员通常会构建两个相互通信的程序:一个不需要显示,因此可以使用终端多路复用器 ( ,
screen
)tmux
或简单地作为 systemd 服务、cronjob、atjob 等。第二个为长时间运行的无头作业提供间歇性图形界面的程序。您似乎有两种选择:让您的 GUI 会话保持活动状态直到完成,或者重写您的代码以不需要始终显示。