在 RHEL 7.4 上。
我们正在使用 Citrix VDA 为我们的应用程序启动 UNIX 桌面会话。该会话只是应用程序,因此当它关闭时,VDA 会话将退出 (Citrix XenApp)。
问题是,如果应用程序核心转储,我们希望启动后台作业以使用 gdb 评估核心文件,收集并压缩核心和日志文件,并将结果通过电子邮件发送给支持人员。但我们不想让用户的前台会话一直保持(可能需要几分钟),因此我尝试将其作为后台作业运行。
但是每次尝试使用 nohup 或定制的守护进程 c 程序(遵循所有标准守护进程标准实践)等都无法在 X 会话关闭后保持进程运行。我认为问题在于会话是用 dbus-launch 建立的,虽然我不完全理解它的所有内部工作原理,但它似乎有一个功能,它会清理退出时的所有内容;如果是这样,它就完成了它的工作。
那么如何在注销后继续运行作业呢?
这是一个简单但具有代表性的会话进程树:
ps -fju 26811
UID PID PPID PGID SID C STIME TTY TIME CMD
545165 4653 4597 4597 4597 0 14:37 ? 00:00:00 /opt/Citrix/VDA/bin/ctxlogin -display :320
545165 4669 4653 4597 4597 0 14:37 ? 00:00:00 /bin/bash /opt/Citrix/VDA/bin/ctxsession.sh
545165 4773 1 4597 4597 0 14:37 ? 00:00:00 dbus-launch --sh-syntax --exit-with-session
545165 4774 1 4774 4774 0 14:37 ? 00:00:00 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
545165 4783 1 4774 4774 0 14:37 ? 00:00:00 /usr/libexec/dconf-service
545165 4818 4669 4597 4597 0 14:37 ? 00:00:00 /opt/Citrix/VDA/bin/ctxctl
545165 4819 4669 4597 4597 0 14:37 ? 00:00:00 /opt/Citrix/VDA/bin/ctxclipboard
545165 4821 4669 4597 4597 0 14:37 ? 00:00:03 /opt/Citrix/VDA/bin/ctxaudio
545165 4822 4669 4597 4597 0 14:37 ? 00:00:00 /opt/Citrix/VDA/bin/ctxlpmngt
545165 4824 4669 4597 4597 0 14:37 ? 00:00:05 /usr/bin/mutter
545165 4825 4669 4597 4597 0 14:37 ? 00:00:00 /opt/Citrix/VDA/bin/ctxtwi 16 4824
545165 4871 1 4870 4870 0 14:37 ? 00:00:00 /usr/bin/pulseaudio --start --log-target=syslog
545165 4894 1 4774 4774 0 14:37 ? 00:00:00 /usr/libexec/gvfsd
545165 4908 1 4774 4774 0 14:37 ? 00:00:00 /usr/libexec/at-spi-bus-launcher
545165 4915 4908 4774 4774 0 14:37 ? 00:00:00 /bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print
545165 4918 1 4774 4774 0 14:37 ? 00:00:00 /usr/libexec/at-spi2-registryd --use-gnome-session
545165 4935 4653 4597 4597 0 14:37 ? 00:00:00 xterm
545165 4973 4935 4973 4973 0 14:37 pts/2 00:00:00 bash
545165 8038 1 8038 8038 0 15:23 ? 00:00:00 ./daemonize
545165 8039 8038 8038 8038 0 15:23 ? 00:00:00 sleep 1200
545165 8052 4973 8052 4973 0 15:23 pts/2 00:00:00 ps -fju 26811
例如,我试图在注销后保持守护进程和睡眠进程运行。它是它自己的会话领导者,没有控制终端。但当 dbus-launch 进程退出时它仍然会关闭。
如果我走对了路,那么 env 变量
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-mGwaZ8i3Ni,guid=57f80a3ec05a1036fe8a6e0e5d30ca6c
可能很重要,但我尝试在守护进程之前取消设置它,但没有帮助。
有什么想法可以让我的垃圾收集进程在注销后保持运行吗?
谢谢,布莱恩