我必须使用 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
答案1
无法按照您建议的方式完成:
正如您所发现的,当 GUI 会话结束时,显示服务器将终止(而不是暂停或隐藏),并且所有子作业也将终止。该行为是注销的基础。
即使你做了一些花哨的事情(比如nohup
)让你的窗口保持活动,它也会立即出错,因为不再有显示。
面临这种情况的开发人员通常会构建两个相互通信的程序:一个程序不需要显示,因此可以使用终端多路复用器(screen
,tmux
)或简单地作为 systemd 服务、cronjob、atjob 等持续运行。第二个程序为长期运行的无头作业提供间歇性图形界面。
您似乎有两种选择:保持您的 GUI 会话处于活动状态直到完成,或者重写您的代码以使其不需要始终显示。