dbus 注销后如何让后台作业继续运行

dbus 注销后如何让后台作业继续运行

在 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

可能很重要,但我尝试在守护进程之前取消设置它,但没有帮助。

有什么想法可以让我的垃圾收集进程在注销后保持运行吗?

谢谢,布莱恩

相关内容