Andrey Tataranovich -> debian-russian@lists.debian.org @ Fri, 9 Oct 2015 13:35:05 +0300:
>> по идее, если его запускает DE, запускаемый из-под пользователя, то >> при выходе из сессии должен глушиться DE и все процессы-потомки, что >> он назапускал. можно попробовать реализовать желаемое средствами DM. >> например, в lightdm есть вот такая штука в конфиге: >> # session-cleanup-script = Script to run when quitting a user session >> (runs as root) как в других - не знаю. >> либо копать в сторону приблуды, управляющей сессиями в DE (типа >> xfce4-session в xfce), возможно там будут какие-то механизмы >> выполнения команд при разлогине AT> Решение в виде session-cleanup-script - это костыль. Оно не AT> универсально и зависит от конкретного DM. Я ищу правильное решение, AT> чтобы приложение могло узнать, что сессия завершается и совершить AT> нужные действия. AT> Похоже DE в частности XFCE4 не следит за всеми процессами, которые были AT> запущены самой DE. Хотя с другой стороны возможно это и правильно - я AT> ведь могу запустить несколько процессов, которые вполне могут жить и AT> после завершения сессии. AT> У меня пробел в знании как вообще работает завершение сессии в DE. Ведь AT> при выходе из системы приложения каким-то образом узнают, что сессия AT> завершается. Например writer просит сохранить документ при выходе, но AT> если ему отправить сигнал TERM, то ничего подобного не происходит. AT> Возможно DE закрывает все окна в текущей сессии и таким образом AT> достигается gracefull exit. Ну, там два хода, скорее всего. Сначала всем окнам посылается close (иксовое сообщение, не сигнал процессу). По нему-то writer и предлагает сохранить документ. А потом тупо делается exit, а за убийство или неубийство процессов отвечает уже ядро, на основании того, работали ли они в той же сессии (уже в смысле процессов, а не в смысле иксов) или при запуске сделали себе setsid. И шлется им, кажется, не SIGTERM, а SIGHUP. Кстати, проверь - если writer'у послать SIGHUP, он предложит сохранить или нет? Надо сказать, что в юниксах традиционно за уход процесса из сессии отвечает сам процесс. Так делают штатные демоны. Но вот zsh, например, имеет ручку "демонизировать запущенное", когда перед exec делается не только fork, но и setsid. Но, кстати, кажется, не закрывает stdout/stderr. nohup, кстати, сколь я помню, не делает setsid, а только игнорирует SIGHUP. Но от терминала отцепляет.