Я пытаюсь получить корректное завершение работы / перезагрузку в ArchLinux с GNOME Shell. Теперь, когда я запрашиваю завершение работы, он немедленно выключается, не давая времени открытым программам корректно закрыть / сохранить открытые файлы. В результате, всякий раз, когда я перезагружаю Chrome (например), он говорит мне, что сессия была закрыта неправильно и т. Д. Читая в Интернете, я узнал, что systemd при закрытии процессов сначала отправляет, а SIGTERMзатем, SIGKILLесли процесс не закрывается в течение определенного времени ожидания. Однако я замечаю, что в моей системе SIGKILLотправляется сразу после, SIGTERMи я думаю, что это является причиной незавершенного завершения программ.
Я нашел некоторую документацию, в которой (если я правильно прочитал) говорится, что время ожидания перед отправкой SIGKILLможет быть установлено TimeoutStopSec=опцией. Также отправка SIGKILLтакже может быть отключена по SendSIGKILL=желанию. Но я не могу найти, где настроить эти параметры ... Есть ли файл конфигурации systemd shutdown / reboot, где я могу установить эти параметры?
РЕДАКТИРОВАТЬ:
Я провел некоторое тестирование и обнаружил две интересные вещи:
- Если я вручную закрою Chrome, как это
killall -SIGTERM chrome, он не будет жаловаться, что он не был закрыт правильно при следующем запуске. Если я вместо этого закроюkillall -SIGKILL chromeего, он будет жаловаться. Это говорит мне о том, что Chrome правильно обрабатывает SIGTERM. - Глядя на вывод моей процедуры выключения, systemd печатает
Sending SIGTERM...сразу послеSending SIGKILL...
Согласно комментарию ниже, systemd обрабатывает только свои процессы. Так что в моем случае GDM. Это говорит мне, что проблема может быть:
- либо GDM не закрывает свои дочерние процессы (например, Chrome) правильно (т. е. отправляя им SIGTERM)
- или systemd отправляет GDM сообщение SIGKILL на ранний срок, не давая ему времени для правильного закрытия дочерних элементов.
Есть ли способ проверить / настроить, как на самом деле GDM закрывает своих детей?
systemd'sконтролем - systemdесть pid 1- но Chrome исполняет сценарий-оболочку в подоболочке и впоследствии вызывает дочерние процессы. Тем не менее, он будет делать то, что ему нужно, чтобы убить его, zygotesпока ваша система правильно настроена. Используете ли вы одно из тех временных решений для Chrome, которое вы найдете рекомендуемым в вики Arch?
gnome-session.