LINUX.ORG.RU

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

 , , ,


0

1

имеется арч, i3wm.

нужно: что бы при выключении или перезагрузке корректно завершались программы, запущенные в юзерспейсе.

я так понимаю,

poweroff -h now
и
poweroff -r now
данного действия не имеют

★★

Вообще-то, поверофф сначала шлет kill -15 всем процессам, а под самый конец уже прибивает их kill -9.

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

чё-то вспомнилось:

SIGQUIT — «эммм… процесс… не мог бы ты остановиться, пожалуйста… если не сложно…»
SIGTERM — «твое время вышло! Убери за собой и шагом марш с памяти, да поживей!»
SIGKILL — приходит лесник и хреначит дубиной по голове, а труп выбрасывает медведям.

http://ibash.org.ru/quote.php?id=17433

Deleted
()

данного действия не имеют

Имеют. Ты неверно понимаешь значение слова «юзерспейс».

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

А еще SIGINT можно блокировать, а SIGERM позволяет только «немного подумать», запустив сборщик мусора (или вечный цикл, если хочется развлечений в виде kill -9).

anonymous
()

halt, reboot и все перечисленное, если не форсить, умеет все это через init-скрипты. sigint -> если остались процессы, сколько-то ждать -> sigkill

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

SIGQUIT — «эммм… процесс… не мог бы ты остановиться, пожалуйста… если не сложно…»

Вежливо так спрашивает. Только он уже тряпочкой с хлороформом тушку вырубил и засунул в цистерну с формалином.

i-rinat ★★★★★
()

что бы все юзерспейс программы завершились перед выключением?

Они всегда завершаются корректно (если хотят). Выключение всегда проходит через runlevel 6 (или что там у systemd) где все сервисы завершаются своими скриптами, остальным процессам посылаются SIGTERM и под занавес SIGKILL (кто не успел, тот сам виноват).

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

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

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

SIGTERM позволяет перехватывать его сколько угодно раз, равно как и SIGINT. В этом смысле между ними нет никаких различий.

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

после ребута хромиум запускается с пустой вкладкой с предложением восстановить последний сеанс, значит чо он не завершается корректно

Значит те, кто писали хромиум повесили такой обработчик на SIGTERM. Если хромиум считает корректным завершением только закрытие по кнопке из GUI - то это не проблемы системы, шлющей ему корректный сигнал, это проблемы хромиума.

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

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

после закрытия он грузит вкладки из предыдущей сессии сразу?

Если ставишь настройку «при старте открывать вкладки открытые на момент закрытия» — то да, сразу открывает и начинает загружать (по несколько штук, а не все сразу), или просто оставляет открытыми и не грузит пока не щелкнешь по ней. Это настраивается в лисе, и в хромом должно.

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

Это появилось давным давно

Что появилось — видел, а вот восстановление вкладок после ручного закрытия я не включал и не видел, как оно работает.

Это настраивается в лисе, и в хромом должно

Странное умозаключение.

или просто оставляет открытыми и не грузит пока не щелкнешь по ней

Так хромосборки делают некоторые.

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

Странное умозаключение

Ну не знаю, неужели хромой настолько убог?

а вот восстановление вкладок после ручного закрытия я не включал и не видел, как оно работает.

Ты каждый раз попадаешь на чистую сессию? Счастливчик, люди по 500 вкладок и больше держат.

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

ну так если послать ему

killall -2 chromium
то запуск будет нормальным

safocl ★★
() автор топика
Ответ на: комментарий от deep-purple

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

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

неужели хромой настолько убог?

С разморозкой, он уже лет девять такой, с тех пор, как появился. На то он и хромой. Местами ситуация с тех пор улучшилась, но лишь местами, в целом политика партии непреклонна.

Ты каждый раз попадаешь на чистую сессию?

Нет, я не закрываю его руками, если только Ctrl+Shift+Q по лисиной привычке не жмякну случайно, если убиваю, то xkill. И вообще давным-давно уже не запускал не с --temp-profile, потому что там куча нужных вкладок, которые при старте начнут жрать трафик и раму и в итоге с большой вероятностью приведут к падению хромога от нехватки рамы. Та же фигня в Midori, Qupzilla, Arora, Opera Classic, Яндекс.Браузере: понаоткрывал на свою голову — и валяются теперь...

люди по 500 вкладок и больше держат

В хромоге-то? То есть ты его в глаза даже не видел, и не в курсе, что там вкладки не прокручиваются? Это не говоря уж о том, что каждая вкладка висит отдельным процессом и жрёт посему кучу рамы, а для выгрузки их из памяти есть лишь глючные костыльные расширения. Правда, он и без костылей не перезагружает сам вкладку с «Опаньки», за которой пришёл OOM, но если надеяться только на это, рано или поздно OOM придёт за основным процессом. Так-то у меня на лисе сейчас около 300, ещё на другом профиле полтысячи и ещё сломавшийся бэкап сессии лежит со столькими же. Но то на лисе.

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

шлющей ему корректный сигнал

Чо? В норме просто убивают SIGINT'ом. В том числе и ^C. Если пришёл SIGTERM — это признак какого-то аврала. А если был аврал, то вполне возможно, что по причине какой-нить форк-бомбы или просто блоатвари в одной из открытых вкладок и лучше их сразу не грузить, а то хромой уйдёт в бутлуп.

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

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

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

так мне может кто то ответить как мне сделать так, что бы хромиум (и др. ПО) нормально автоматом завершался при перезагрузке и отключении ??? что бы не использовать костыли со своими скриптами?

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

Это не люди, это киборги. Память человека рассчитана на 5-7 объектов переднего плана, остальное не нужно.

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

хмммм... как жеж я сам то до ентого не догадался... проста ужас...

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

Как основным я хроможеством пытался пользоваться лет пять назад, ещё на винде, и быстро сменил на Comodo Dragon, потому что хромодрянь без спросу качала апдейты, с гигабайтом трафика в месяц-то, а про Chromium ещё не знал. Даже если заблочить фаерволом ChromeUpdater.exe, оно начинало качать через основной процесс, пока запущено. Chromium же не с временным профилем в прошлом году ещё пускал, а с временным не далее как пару дней назад.

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

А почему бы и нет? Хотя, конечно, автор демона может и игнорировать этот сигнал: все равно маловероятно, что кто-то будет kill -2 вызывать.

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

Да что ты говоришь! И пусть он логи полуоборванные сохранит, а то и БД покоцает «на прощание».

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

Для вендузятника может и быть. Для ос дружественной скриптингу и автоматизации — нет.

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

В 70-х коцать между SIGTERM и SIGKILL особо чего не было, максимум файловые дескрипторы позакрывать.

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

Лиса твоя сделана через жопу)) все программы что под руками обрабатывают сигналы нормально.

anonymous
()

Есть у меня стойкое подозрение, что современные браузеры просто не успевают корректно закрыться между SIGTERM и SIGKILL.

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

У меня по SIGTERM моментально вылетает лиса, даже с горою вкладок, ютубом и флешом и потом на следующий раз пишет "ой вот ведь незадача" ^_^

[d_a@home ~]$ /run/media/d_a/www-data/.dist/firefox/firefox --profile /run/media/d_a/www-data/.mozilla/firefox/jajauma 2>/dev/null &
[1] 15345
[d_a@home ~]$ kill -s SIGTERM %1; time wait %1
[1]+  Завершено      /run/media/d_a/www-data/.dist/firefox/firefox --profile /run/media/d_a/www-data/.mozilla/firefox/jajauma 2> /dev/null

real	0m0.032s
user	0m15.467s
sys	0m2.075s
Откуда 15 секунд только нарисовалось я не знаю, как правильно померять?!

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

Хотя и так вроде верно меряет время до закрытия ...

[d_a@home ~]$ fufufu() { trap 'sleep 3 && exit 42' 15; sleep infinity; }
[d_a@home ~]$ fufufu &
[2] 16091
[d_a@home ~]$ kill -15 %2; time wait %2
[2]+  Exit 42                 fufufu

real	0m3.006s
user	0m0.001s
sys	0m0.014s
А с FF врёт отчего-то.

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

Да, одно другого не исключает. Видимо они в своём же говнокоде не могут разобраться чтобы обрабатывать сигнал как гуёвое закрытие.

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

И чего там интересного?

   Signal dispositions
       Each signal has a current disposition, which determines how the process behaves when it is delivered the signal.

       The entries in the «Action» column of the tables below specify the default disposition for each signal, as follows:

       Term   Default action is to terminate the process.
       SIGINT        2       Term    Interrupt from keyboard
       SIGKILL       9       Term    Kill signal
       SIGTERM      15       Term    Termination signal

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

Но зачем? Гуёвое закрытие вообще через иксы обрабатывается, а не через сигналы, у одного приложения может быть много окон.

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

Разницу между KILL (не может быть перехвачен) и TERMINATE (обрабатывается) улавливаешь?

Вот тебе выдержка из кода sshd (демон, да):

		if (received_sigterm) {
			logit("Exiting on signal %d", (int)received_sigterm);
			/* Clean up sessions, utmp, etc. */
			cleanup_exit(255);
		}

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)

Что?

Используй

systemd poweoff

Арч — нормальный дистрибутив, тут есть systemd, и можно выключить компьютер без использования всяких костылей!

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

А ещё в качественном коде должны обрабатываться всякие исключительные ситуации типа отвала соединения, сбоя записи, мусора на входе и прочего. Но при чём тут норма? В норме сервер с запущенными демонами должен работать бесперебойно годами, пока его не спишут.

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