LINUX.ORG.RU

emu-nero~: правильный ответ REISUB

\\паста из чатика\\

save_data
()
Ответ на: комментарий от Homura_Akemi

Мне не нужно завершение по SIGTERM, чтобы потом некоторые приложения жаловались, что я их жестоко убил.

Valdor ★★
() автор топика
Ответ на: комментарий от staseg

Прочитав ссылку и вообще инструкцию, пришел к выводу, что надо сделать так:

qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout -0 -1 -2
По идее, это без подтверждений перезагрузит комп. Но почему-то все ограничивается выходом из KDE.

Valdor ★★
() автор топика
Ответ на: комментарий от Homura_Akemi

Удваиваю вопрос. Всегда считал, что reboot/shutdown вполне корректный способ перезагрузки/завершения работы вне зависимости от DE.

anonymous
()

Да блджад, неужели нельзя не обсуждать, нужно ли мне это, а ответить по сути?

Valdor ★★
() автор топика
Ответ на: комментарий от Valdor

Мне не нужно завершение по SIGTERM, чтобы потом некоторые приложения жаловались, что я их жестоко убил.

Это кривые приложения, ведь SIGTERM это не SIGKILL. SIGTERM — вежливое требование прекратить выполнение, если же приложение не в состоянии его корректно выполнить, то оно кривое. Самый известный пример, к сожалению, это Firefox.

Homura_Akemi
()
Ответ на: комментарий от Homura_Akemi

Я как раз по необходимости пользуюсь и Chrome и Firefox. Именно поэтому мне нужно грамотное завершение.

Valdor ★★
() автор топика
Ответ на: комментарий от Valdor

Последовательно отправляются сигтермы приложениям, ЕМНИП. Попробуй sudo init 6 выполнить, а потом проверь.

mopsene ★★★
()
Ответ на: комментарий от Valdor

Костыль:

Напиши скриптик, который будет отправлять SIGTERM активным приложениям (или только проблемным) и будет выполняться перед reboot.

mopsene ★★★
()
Ответ на: комментарий от Valdor

Я как-то раньше делал это, точную комбинацию флагов не помню - там по ссылке они расписаны. Или ты напутал с флагами, либо запустил кеды не через KDM, тогда им вполне может просто не хватить прав на ребут.

staseg ★★★★★
()
Ответ на: комментарий от staseg

Нашел на одном сайте другой вариант.

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Он работает, как надо.

Valdor ★★
() автор топика
Ответ на: комментарий от Homura_Akemi

AFAIK проблема ещё в том, что не все успевают завершиться до прихода sigkill от init. DE же обычно терпеливо ждёт, пока завершатся все процессы.

aidaho ★★★★★
()
Ответ на: комментарий от Homura_Akemi

если же приложение не в состоянии его корректно выполнить, то оно кривое. Самый известный пример, к сожалению, это Firefox.

А чё Firefox, оно вполне себе по умному делает. Если оно прекратило свою работу не обычным образом, то оно при следующем запуске восстанавливает предыдущую сессию.

firestarter ★★★☆
()
kdeinit4_shutdown --help
Usage: kdeinit4_shutdown

Shuts down kdeinit4 master process and terminates all processes spawned from it.

Ну а после него можно и reboot. Я, правда, не парюсь, а ребучу прямо из кед командой reboot, никаких проблем. Только Akregator спрашивает, восстановить ли предыдущую сессию (не знаю что это значит, я соглашаюсь).

firestarter ★★★☆
()
Последнее исправление: firestarter (всего исправлений: 1)
Ответ на: комментарий от Valdor

кстати да, сам хотел dbus посоветовать. он же для подобного и создан.

Komintern ★★★★★
()
Ответ на: комментарий от Homura_Akemi

Это кривые приложения, ведь SIGTERM это не SIGKILL. SIGTERM — вежливое требование прекратить выполнение, если же приложение не в состоянии его корректно выполнить, то оно кривое. Самый известный пример, к сожалению, это Firefox.

когда я пытался вот таким образом обработать sigterm в deadbeef, столкнулся с нерешаемой проблемой, и заключается она вот в чем.

когда юзер запускает reboot/shutdown — всем процессам посылается sigterm. в т.ч. wm, иксам, и черт знает чему еще. главное — иксы от этого завершаются.

так вот, у меня gtk крутится в отдельном потоке, а обработчик sigterm в главном (во всяком случае, выставляю я его из главного потока). предположим, что обработчик sigterm пишет конфиги, сохраняет плейлисты, и т.п.. в этот момент иксы помирают, и gtk ловит дисконнект. по дисконнекту - оно завершает процесс (через exit, или еще как-то, с ошибкой). о том, что в этот момент другой поток сохраняет конфиги на диск, оно не знает, и прерывает прямо посреди операции. как результат — получаем запоротые файлы. причем всегда разные. или не получаем, как повезет. я конечно это исправил, и сначала пишу все во временные файлы, а потом переименовываю (чтобы избежать порчи файлов). но все равно, часть файлов запишется, а потом операция прервется.

думаю, для решения этой проблемы и придумали session manager, libeggsmclient, и т.п.

waker ★★★★★
()
Ответ на: комментарий от waker

странно, что для решения этой проблемы в gtk не сделали возможность просто не прибивать процесс при потере коннекта.

thesame ★★★★
()
Ответ на: комментарий от thesame

странно, что для решения этой проблемы в gtk не сделали возможность просто не прибивать процесс при потере коннекта.

угу, странно. может и сделали, но я не нашел.

waker ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.