Hi,
David Zeuthen wrote:
2. I think we've all experienced this one or more times; you log
out
of your session and log back in. Wow, now things are weird or maybe
doesn't even work. The reason for this is that processes from your
old session keeps hanging around. In fact, I was bitten by this just
before the holidays; I simply couldn't login. Why? An old gconfd
process was lingering and that blocked login. The solution? Log in
as root on VT1 and do the usual 'killall -9 -u davidz' dance.
This may be obvious, but the "correct" solution is supposed to be that
apps should connect to either the X server or the session message bus
and they should exit when the X server or message bus does. (Both Xlib
and libdbus exit on disconnect by default for this reason.)
Other solutions are pretty much hacks, I mean, they may be worthwhile
and pragmatic hacks, but, nonetheless. Apps should be exiting with the
session already or they are buggy.
One alternate approach might be to write a little babysitter/proxy app
(just like the way dbus-launch ties the session bus to the X server).
The babysitter app would connect to the session bus, then exec its args
as a child process, and kill the child process when it lost the
connection. Of course, this involves modifying any code that launches a
session service so it launches it with the babysitter, so perhaps not ideal.
Notably, 00-ck-xinit-session.sh will take care of problem 2. The way
it
does this is because of the way that ConsoleKit works. It basically will
just kill all the processes where the uid and the environment variable
XDG_SESSION_COOKIE matches. First it tries SIGTERM. Then after a few
seconds, it moves on to SIGKILL (e.g. -9).
I would think this should only be done after the session bus is gone and
apps have had a chance to cleanly exit, and maybe some kind of warning
should be logged like "crappy app xyz had to be killed"
There is a race, where a correct app that was on its way to exiting on
its own gets killed because it was too slow... but in practice I doubt
that would happen too much.
Havoc