В Линуксе программы имеют 2 вида убивания: TERM и KILL. Процессы, запущенные в сеансе пользователя, при завершении сеанса получают команду TERM. Если за определенное время они не успели завершиться - KILL. То есть надо тебе обрабатывать именно TERM, иначе твоя программа просто будет убита командой KILL.

Реализацию в Лазарусе не пробовал делать, но можешь попробовать обработать событие OnDestroy из главной формы.
Добавлено спустя 1 час 7 минут 26 секунд:Хм... Я чет сейчас попробовал и нифига OnDestroy не обрабатывается... Просто убивается программа и все...
Добавлено спустя 45 минут 59 секунд:Хм... Отловил событие SIGTERM, но при завершении сеанса оно не срабатывает... похоже все таки программа убивается SIGKILL'ом... Ща пробую
Добавлено спустя 47 минут 7 секунд:Да уж... Не знаю даже, чей косяк... У меня стоит Gnome 2.28. При закрытии сеанса он просто тупо убивает себя и все программы SIGKILL'ом, который отловить не представляется возможным...
Не знаю, как обстоят дела с KDE, пробовать неохота, больно много места занимает. Сейчас хочу попробовать Xfce4, посмотрю что можно в нем сделать