Ubuntu не отправляет SIGTERM на завершении работы

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

Если я оставляю хром открытым, когда закрытие его говорит, что он не закрылся в правильно прошлый раз, когда я открываю его снова после того, как начальная загрузка, LibreOffice не спрашивает меня, если я хочу сохранить свой документ, и я подаю заявку, которая должна выполнить некоторый код выхода, но не позволяется сделать так, когда компьютер закрывается.

Поскольку я понял это, SIGTERM сначала отправляется во все процессы, чтобы позволить им выходить чисто и если они не выходят, SIGKILL отправляется, чтобы вынудить их выйти. Кажется, что Ubuntu или не отправляет SIGTERM вообще или не дает приложениям достаточно времени прежде, чем отправить SIGKILL.

Есть ли некоторый способ, которым я могу зафиксировать это?

Я запускаю Ubuntu 16.04, но проблема существовала в 15,10 также. Я не могу сказать, было ли это там, прежде чем с тех пор я начал использовать Ubuntu, когда 15.10 была новейшая версия.

Править: Я использую Единицу и закрываю мой компьютер путем нажатия механизма в правом верхнем углу и выбора закрытия, хотя проблемой является то же при выполнении sudo halt в терминале.

Править: Я наблюдаю то же поведение, только выходя из системы. Мое предположение - то, что сигнал, как предполагается, переслан, выходят из системы, и поэтому проблема возникает на завершении работы, и выйти из системы.

21
задан 26 June 2016 в 00:46

3 ответа

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

Можно легко попробовать его, не имея необходимость завершать работу. Просто отправьте SIGTERM в свой под управлением Firefox или процесс LibreOffice:

$ pkill firefox

Обычно, Firefox мог бы спросить, хотите ли Вы действительно закрыть его. Кроме того, это обычно требует времени к завершению, особенно когда это работало в течение долгого времени и использовало больше чем 1 ГБ RAM - это часто берет как минута для процесса для завершения после того, как его последнее окно закрылось. Ни одного из этого не происходит при отправке SIGTERM процесс только что завершается немедленно.

Однако некоторые настольные среды закрывают все открытые окна перед закрытием. В отличие от SIGTERM, закрывая окно программно похож на нажатие на X кнопок того окна или Высокий звук + F4. Это также, что делает сценарий в другом ответе - он использует wmctrl для закрытия всех открытых окон корректно.

Когда окно закрывается, программа не находится в порыве, и это может закрыть все в том окне, например, открытые вкладки, и это может также показать диалоговое окно, если там не сохранил работу. После того как все открытые окна приложения закрылись, процесс обычно завершается вскоре после этого.

Таким образом, это зависит от Вашей настольной среды (предполагающий использование настольной среды для завершения работу и нет sudo poweroff). Например, KDE должен ожидать открытых окон, которые будут закрыты перед закрытием, в то время как ПОМОЩНИК не делает.

Нижняя строка: Закройте все открытые окна вручную перед закрытием. Или используйте настольную среду, которая ожидает всех окон, которые будут закрыты.

3
ответ дан 23 November 2019 в 01:46

Если это имеет значение, некоторое время назад, я нашел эту процедуру по форуму Manjaro:

close_apps () {
WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
for i in $WIN_IDs; do wmctrl -ic "$i"; done

# Keep checking and waiting until all windows are closed
while [ "$WIN_IDs" != "" ]; do
        sleep 0.1;
        WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
done

}

Можно назвать его в собственном сценарии для закрытия всех открытых приложений до завершения работы (или перезапуск).

Единственное проблема быть, это было создано для Xfce так, этому нужны изменения, которые налагает Единица DE. Немного справки от кого-то более хорошо осведомленного вошло бы приятно здесь, чтобы помочь решить проблему OP.

0
ответ дан 23 November 2019 в 01:46

На самом деле часть сценария, который закрывает все окна и не зависит ни от какого конкретного DE, доступна на, Спрашивают. 2-е и 3-и ответы особенно полезны. Только с немногими строками больше, и путем создания средства запуска в панели или на рабочем столе можно достигнуть корректного завершения работы, которое работает в DE, который Вы используете.

Как закрыть все открытые окна корректно

0
ответ дан 23 November 2019 в 01:46

Другие вопросы по тегам:

Похожие вопросы: