Linux - 残留的dbus-daemon或dbus-launch,如何避免或如何清理?
Posted the sre
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux - 残留的dbus-daemon或dbus-launch,如何避免或如何清理?相关的知识,希望对你有一定的参考价值。
Linux - 残留的dbus-daemon或dbus-launch,如何避免或如何清理?
文章目录
前言
远程启动应用并关闭应用后,有残留的dbus进程。这个情况在一般情况下没什么大不了,但在集群调度的环境,残留的任何进程将可能导致调度系统误判job未完成。
一、dbus是什么?
移步官网。
二、模拟残留dbus进程
$ emacs
(emacs opens and then close it)
$ ps -ef | grep USER
USER 12467 1 0 11:47 pts/115 00:00:00 dbus-launch --autolaunch e6d5e75b43ed447899e385d217cd827f --binary-syntax --close-stderr
USER 12469 1 0 11:47 ? 00:00:00 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
USER 12473 1 0 11:47 ? 00:00:00 /usr/libexec/gconfd-2
$ logout
(Waiting until C-c)
三、根因
这是因为dbus-launch/dbus-daemon仍然是活动的(它们是与父终端分离创建的)。
四、解决方案
首先现将dbus升级到对应版本
- (RHEL 7) dbus-1.10.24-3.el7
- (RHEL 6) dbus-1.2.24-9.el6
或更新。
1. 对于交互shell,确保在启动shell进程前启动dbus-run-session
if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
exec dbus-run-session -- bash
echo "D-Bus per-session daemon address is: $DBUS_SESSION_BUS_ADDRESS"
fi
这样就保证了shell进程在dbus-run-session下
$ ps f
PID TTY STAT TIME COMMAND
2075 pts/0 Ss 0:00 dbus-run-session -- bash
2095 pts/0 Sl 0:00 \\_ dbus-daemon --nofork --print-address 4 --session
2096 pts/0 S 0:00 \\_ bash
2. 对于非交互式的,直接使用dbus-run-session -- command
3. 写一个.bash_logout脚本,来负责bash退出时的dbus进程清理操作
# ~/.bash_logout
# Check if we are the "parent" shell in a ssh session
[ "$(cat /proc/$PPID/comm)" == "sshd" ] || return
cgroup=$(awk -F ':' '$2 == "name=systemd" { print $3 }' /proc/self/cgroup)
[ -n "$cgroup" ] || return
# Search for "dbus-[daemon|launch]" programs running for this session
for pid in $(cat /sys/fs/cgroup/systemd/$cgroup/tasks 2>/dev/null); do
comm=$(cat /proc/$pid/comm 2>/dev/null)
case "$comm" in
dbus-daemon|dbus-launch)
echo "Killing '$comm' (PID $pid) ..."
kill $pid
;;
esac
done
总结
以上就是bash shell下预防或清理残留dbus进程的现象、原因以及解决方案。如有问题,请留言反馈。
参考资料
https://access.redhat.com/solutions/3257651
https://www.ibm.com/support/pages/node/886765
以上是关于Linux - 残留的dbus-daemon或dbus-launch,如何避免或如何清理?的主要内容,如果未能解决你的问题,请参考以下文章