PrepareForShutdown
Модератор: Модераторы
- alexs
- долгожитель
- Сообщения: 4067
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Нельзя блокировать действия пользователя!
Пример из моей жизни - я вечером работаю перед сном. После работы нажал кнопку на корпусе ПК. Он у меня СРАЗУ переходит в спящий режим. И это МОЁ желание как пользователя. Мне не надо чтобы эта железка не исполняла мои требования. Если комп не выклюился - я принудительнь завершу блокирующую программу в любом случае. А если она при этом потеряет мои данные - я просто перестану пользоваться этой программой.
1. Программа не должна допускать потери данных в любом случае (свет моргнул/кошка провод съела/убощица шваброй по компу ударила.... )
2. ПК должен быть отзывчивым в первую очередь на мои действия
Всё это относится именно к рабочей станции - на серверах своя логика. Там вообще процесс выключения - это не штатная ситуации и аларм полный....
Пример из моей жизни - я вечером работаю перед сном. После работы нажал кнопку на корпусе ПК. Он у меня СРАЗУ переходит в спящий режим. И это МОЁ желание как пользователя. Мне не надо чтобы эта железка не исполняла мои требования. Если комп не выклюился - я принудительнь завершу блокирующую программу в любом случае. А если она при этом потеряет мои данные - я просто перестану пользоваться этой программой.
1. Программа не должна допускать потери данных в любом случае (свет моргнул/кошка провод съела/убощица шваброй по компу ударила.... )
2. ПК должен быть отзывчивым в первую очередь на мои действия
Всё это относится именно к рабочей станции - на серверах своя логика. Там вообще процесс выключения - это не штатная ситуации и аларм полный....
- Alexander
- энтузиаст
- Сообщения: 875
- Зарегистрирован: 18.12.2005 18:10:00
- Откуда: оттуда
- Контактная информация:
Там всё это расписано как должно быть. Программы всегда сохраняют при выключении свои данные, иначе они их теряют. Иное есть аварийное завершение системы, а не штатное. Такое впечатление, что многие спутали зависание программы при выключении системы со штатным сохранением ей данных при выключении системы.
А при нажатии на кнопку уже происходят все те же вышеописанные действия, но не сразу, а быстро. Просто это именно быстрые действия, не заметишь, как эти сигналы обработаны. Этого нет только в Паскале, часть программ на Си их уже так или иначе обрабатывает и при нажатии на кнопку это всё успевает произойти. Линукс очень быстрая система. То есть оно устроено и работает именно так и странно не знать этого.
Данные же не должны теряться в любом случае, это главное. Не есть доблесть то, что компьютер выключится быстро, если он при этом потеряет данные.
А при нажатии на кнопку уже происходят все те же вышеописанные действия, но не сразу, а быстро. Просто это именно быстрые действия, не заметишь, как эти сигналы обработаны. Этого нет только в Паскале, часть программ на Си их уже так или иначе обрабатывает и при нажатии на кнопку это всё успевает произойти. Линукс очень быстрая система. То есть оно устроено и работает именно так и странно не знать этого.
Данные же не должны теряться в любом случае, это главное. Не есть доблесть то, что компьютер выключится быстро, если он при этом потеряет данные.
Это в идеале так. А на практике, есть спящий режим с погружением работающих программ в своп, а когда надо просто выключить линукс, то это скорее всего когда что-то идёт не так, и часто глюкнувшие программы вообще не дают произвести нормальное выключение. Оно не происходит из-за блокировок чего-то неизвестного и тогда нужно набирать команду в консоли, которая по быстрому отключит принудительно.Alexander писал(а):Это всё полностью неверно. До тех пор, пока пользовательские программы не завершат корректно свою работу, система не может быть остановлена - они должны блокировать завершение работы системы на время сохранения своих данных.
Добавлено спустя 6 минут 8 секунд:
Афигительно! Уже и уход в спячку портят. Быстрый уход в спячку нужен когда пропадает электричество, а заряд батареи в безперебойнике вот-вот кончится, и тогда комп вообще потухнет с потерей всех данных. А тут какая-то сволочь не даст и спячку врубить.Alexander писал(а):systemd 183 и новее включают логику, запрещающую завершение работы системы и переходы в спящий режим. Это реализовано как часть systemd-logind.daemon(8). Для этого существует несколько различных вариантов использования:
- Alexander
- энтузиаст
- Сообщения: 875
- Зарегистрирован: 18.12.2005 18:10:00
- Откуда: оттуда
- Контактная информация:
> Быстрый уход в спячку нужен когда пропадает электричество,
Это аварийный случай, а не штатный, я его тоже упомянул. Но да, такие ситуации рассматриваются и рассматриваются отдельно. Есть форсированный режим выключения и эту тему можно и нужно развивать. Но это развитие темы аварийного, форсированного способа выключения.
Касаемо самой описанной ситуации нужно изобретать свою систему питания ПК. Имеющаяся бесперебойная имеет низкий КПД (преобразование в 50 герц) и неэффективно использует аккумулятор. Тогда и при сбое питания не придётся прибегать к решениям с потерей данных, а выключать, но выключать штатно без форсажа. Это тяжело, но если напрячься всему радиолюбительству возможно.
Это аварийный случай, а не штатный, я его тоже упомянул. Но да, такие ситуации рассматриваются и рассматриваются отдельно. Есть форсированный режим выключения и эту тему можно и нужно развивать. Но это развитие темы аварийного, форсированного способа выключения.
Касаемо самой описанной ситуации нужно изобретать свою систему питания ПК. Имеющаяся бесперебойная имеет низкий КПД (преобразование в 50 герц) и неэффективно использует аккумулятор. Тогда и при сбое питания не придётся прибегать к решениям с потерей данных, а выключать, но выключать штатно без форсажа. Это тяжело, но если напрячься всему радиолюбительству возможно.
Это всё дорого. На практике может использоваться древнючий ИБП, который пережил уже несколько аккумуляторов - мелких свинцовых. Как ты им не улучшай КПД преобразования, амперчасов у них мало, особенно, если они уже деградировали, а это со свинцовыми происходит очень быстро. А электричество за городом могут отключать превентивно - где-то дождь пошёл и ветер подул чуть сильнее, а отключим мы электросеть, чтобы она не сломалась и потом её не чинить. Потому, быстрый уход в спячку, это почти штатный режим, может понадобиться в любой момент.Alexander писал(а):Касаемо самой описанной ситуации нужно изобретать свою систему питания ПК. Имеющаяся бесперебойная имеет низкий КПД (преобразование в 50 герц) и неэффективно использует аккумулятор. Тогда и при сбое питания не придётся прибегать к решениям с потерей данных, а выключать, но выключать штатно без форсажа. Это тяжело, но если напрячься всему радиолюбительству возможно.
- Alexander
- энтузиаст
- Сообщения: 875
- Зарегистрирован: 18.12.2005 18:10:00
- Откуда: оттуда
- Контактная информация:
Вот, что я имел в виду. Есть две схемы реальная (низковольтная) и гипотетическая (добавлением в блок питания компьютера). Реальная успешно и эффективно прослужила годы и ещё исправна. Гипотетическую ещё надо придумать. Но если свет мигает по-крупному и реальная может быть уже полезна для маломощных устройств.
Высокий КПД конечно не прибавит многое, но в 2-4 раза может продлить работу.

Высокий КПД конечно не прибавит многое, но в 2-4 раза может продлить работу.

- Alexander
- энтузиаст
- Сообщения: 875
- Зарегистрирован: 18.12.2005 18:10:00
- Откуда: оттуда
- Контактная информация:
С применением ИИ сделал всё-таки это. Вот экспериментальная версия органайзера с поддержкой ингибиторов перезагрузки/выключения компьютера. В системах без systemd такой подход может не работать.
http://soft.self-made-free.ru/GORG64_434.tar.xz
Документация: https://systemd.io/INHIBITOR_LOCKS/
Полезные команды на тему:
http://soft.self-made-free.ru/GORG64_434.tar.xz
Документация: https://systemd.io/INHIBITOR_LOCKS/
Полезные команды на тему:
Код: Выделить всё
sudo busctl monitor org.freedesktop.login1Код: Выделить всё
systemd-inhibit --listКод: Выделить всё
systemctl status dbusКод: Выделить всё
sudo dbus-monitor --system "interface='org.freedesktop.login1.Manager', member='PrepareForShutdown'"Как и было написано:
RRYTY писал(а):Приостанавливать процесс выключения могут лишь программы, запущенные специальным образом и с особыми правами.
В системах без systemd придется написать свою службу запуска/остановки. Что нужно сделать и для систем с systemd, и вообще для любой ОС.Alexander писал(а):В системах без systemd такой подход может не работать.
- Alexander
- энтузиаст
- Сообщения: 875
- Зарегистрирован: 18.12.2005 18:10:00
- Откуда: оттуда
- Контактная информация:
В смысле "Как и было написано" ? Он что не работает ?
У меня всё работает:
У меня всё работает:
Код: Выделить всё
systemd-inhibit --list
WHO UID USER PID COMM WHAT WHY MODE
ModemManager 0 root 841 ModemManager sleep ModemManager needs to reset devices delay
NetworkManager 0 root 870 NetworkManager sleep NetworkManager needs to turn off networks delay
UPower 0 root 1840 upowerd sleep Pause device polling delay
Unattended Upgrades Shutdown 0 root 940 unattended-upgr shutdown Stop ongoing upgrades or perform upgrades before shutdown delay
Galaxy Organizer 1000 first 1574 gorg64 shutdown Saving files before shutdown delay
5 inhibitors listed.
Наоборот, все нормально.
