Автор Тема: Chromium / Постоянно предлагает восстановить старую сессию [решено]  (Прочитано 4633 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
...Ну вот чего опять вредничать то? Могу предположить, что что это одно из очень нужных кому то расширений заставляет браузер напомнить о себе Только и всего... ;-)

При чём тут блин расширения?
Читать выводы умеем?
У браузера без расширений, Crashed и false стоит в Preferences и Local State на нормальном выходе. Какой нахер Crashed? Какой нахер "exited_cleanly":false (в Local State) если выход браузера без расширений был чистым?

Завершение работы браузера в режиме восстановления открытых вкладок на старте браузера:
$ strace chromium
...
write(11, "\1\0\0\0\0\0\0\0", 8)        = 8
close(12)                               = 0
close(13)                               = 0
getpid()                                = 19733
getpid()                                = 19733
exit_group(0)                           = ?
+++ exited with 0 +++

Вот такими должны были быть состояния на нормальном завершении с '+++ exited with 0 ++' браузера без расширений:
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"Normal"
"exited_cleanly":true
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanly
"exited_cleanly":true

И если вылезли Crashed и false, есть повод для беспокойства.
И неважно что браузер не предлагал восстановить профиль или сессию. Важно что результирующие состояния были не теми, какими они должны были быть.
« Последнее редактирование: 21.07.2021 12:56:32 от Speccyfighter »

Оффлайн Kalt

  • Завсегдатай
  • *
  • Сообщений: 996
Intel Xeon X3440 2,53GHz, MSI H55- G43, DDR3- 4x2GB, GF GT710

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Всем привет!
OS Simply Linux 9 x64 p9
С последней версией Chromium из репозитория появилась проблема, при открытии окна браузера предлагается восстановить предыдущую сессию, якобы работа с браузером в предыдущий раз была завершена некорректно. Но на самом деле браузер был закрыт совершенно корректно.

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

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Сейчас на работающем браузере:
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"Crashed"
"exited_cleanly":true
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanly
"exited_cleanly":false


Сымитировал запрос восстановления сессии, когда процессам chromium был переслан сигнал QUIT:

Браузер не запущен
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"Normal"
"exited_cleanly":true
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanly
"exited_cleanly":true

Браузер запущен
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"Crashed"
"exited_cleanly":true
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanly
"exited_cleanly":false

Пересылаем QUIT процессам chromium
$ kill -3 $(ps -eo pid,args | grep chromium | grep -v grep | awk '{print $1}')

Имеем текущие состояния
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"Crashed"
"exited_cleanly":true
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanly
"exited_cleanly":false

с результатом на скриншоте:

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Браузер запущен после номального выхода (с: Normal true true)
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"Crashed"
"exited_cleanly":true
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanly
"exited_cleanly":false

Завершаем процессы chromium по QUIT
$ kill -3 $(ps -eo pid,args | grep chromium | grep -v grep | awk '{print $1}')

с состояниями
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"Crashed"
"exited_cleanly":true
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanly
"exited_cleanly":false

Изменяем состояния на нормальные
(exited_cleanly в Preferences менять не нужно, он в true)
$ sed -i 's/\"exit_type\"\:\"Crashed\"/\"exit_type\"\:\"Normal\"/' ~/.config/chromium/Default/Preferences
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"Normal"
"exited_cleanly":true
$ sed -i 's/\"exited_cleanly\"\:false/\"exited_cleanly\"\:true/' ~/.config/chromium/Local\ State
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanly
"exited_cleanly":true

И получаем нормальный запуск браузера без запроса восстановления сессии.

Если в Preferences exited_cleanly в false, то и его в true:
sed -i 's/\"exit_type\"\:\"Crashed\"/\"exit_type\"\:\"Normal\"/; s/\"exited_cleanly\"\:false/\"exited_cleanly\"\:true' ~/.config/chromium/Default/Preferences


После корректного завершения браузера
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"Normal"
"exited_cleanly":true
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanly
"exited_cleanly":true

при корректно запущенном браузере, состояния будут
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"Crashed"
"exited_cleanly":true
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanly
"exited_cleanly":false

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
В общем дополняя Koi
#!/bin/sh
#
sed -i 's/\"exit_type\":\"Crashed\"/\"exit_type\":\"Normal\"/' ~/.config/chromium/Default/Preferences
script.sh chomium

$ cat chromium-restore.sh
#!/bin/sh

sed -i 's/\"exit_type\":\"Crashed\"/\"exit_type\":\"Normal\"/; s/\"exited_cleanly\":false/\"exited_cleanly\":true/' \
~/.config/chromium/Default/Preferences

sed -i 's/\"exited_cleanly\":false/\"exited_cleanly\":true/' \
~/.config/chromium/Local\ State

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Как вариант, процессам chromium, можно пересылать сигнал TERM, браузер нормально запустится:
$ kill -15 $(ps -eo pid,args | grep chromium | grep -v grep | awk '{print $1}')
$ grep 'exit_type' ./.config/chromium/Default/Preferences | sed 's/,/\n/g' | grep exit_type -A1
"exit_type":"SessionEnded"
"exited_cleanly":true
$ sed 's/,/\n/g' ./.config/chromium/Local\ State | grep cleanlyhttps://chromium.googlesource.com/chromium/src/+/8956256053b4cc8562225dc6a13ec13d0e9fa272/chrome/browser/profiles/profile_browsertest.cc
"exited_cleanly":true

Исходный код
https://chromium.googlesource.com/chromium/src/+/8956256053b4cc8562225dc6a13ec13d0e9fa272/chrome/browser/profiles/profile_browsertest.cc