SSH не прекращается после выхода из программы X Forward

9

После запуска программ X по SSH SSH не завершает работу после выхода из оболочки (необходимо использовать, например, CtrlCчтобы убить его).

Я предполагаю, что, хотя программа X уже завершена, остается еще какое-то «соединение» (не освобожденное). Исключения, которые я нашел сейчас, gtk-demoи acroread.

Кто-нибудь знает причину? Это проблема с конфигурацией ssh ​​{, d}?

yuyichao
источник
1
Вы можете проверить это для себя. Запустите ssh с ключом -v, и он сообщит об открытии и закрытии соединений X11.
Кайл Джонс
@KyleJones THX, кажется, что это проблема (два «соединения» освобождаются после C-cнажатия).
yuyichao
У меня такая же проблема на SLES11 с любым X11-окном. Как вы проследили путь до dbus?
Нильс
Вы можете просто проверить процесс, работающий как вы (если нет других активных сессий). Я использую systemd и включил его в sshd (настройка pam), поэтому весь процесс в сеансе ssh находится в одной и той же cgroup, что упрощает проверку. ~~
yuyichao

Ответы:

5

Запуск программы X, вероятно, запускает фоновый процесс, который не завершается при закрытии программы (или сама программа не завершается должным образом). Смотрите здесь для объяснения того, что происходит.

Чтобы это исправить, вы можете попытаться выяснить, какие процессы все еще работают, и либо запретить их запуск при входе через SSH, либо просто убить их перед выходом из системы. Вы также можете просто разорвать соединение SSH после того, как выйдете из системы.

Ларс Котхофф
источник
К, проблема в том, что процесс dbus (gconf) все еще выполняется. (спасибо systemd-cgls~~) (я пытался killall -KILLзаставить саму программу подумать, что она может разорвать какой-то фоновый процесс раньше, но это не так.) Так есть ли способ сделать все хорошо? (например, автоматически убить dbus (gconf)) THX
yuyichao
1
Вы можете добавить killall dbusили что-то подобное в свой .logout, но это, вероятно, испортит другие вещи (например, когда вы вошли в систему локально).
Ларс Котхофф,
Хм, кажется, мне нужно сделать это вручную (то есть нет прямого варианта для этого). По крайней мере, я уже использую, kill-session=1и, надеюсь, systemd может сказать мне, какой процесс нужно убить (т.е. не уничтожать процессы в других сеансах.) ~~~ THX
yuyichao