Linux – Graceful shutdown in ArchLinux

arch linuxgdm3shutdown

I'm trying to get a graceful shutdown/reboot in ArchLinux with GNOME Shell. Now, when I ask for shut-down, it immediately shuts down without giving open programs time to gracefully close / save open files. As a result, whenever I restart Chrome (for example) it tells me that the session was not closed correctly etc.
By reading on the web I learnt that systemd while shutting down processes, it first send a SIGTERM followed by SIGKILL if the process does not close withing a given timeout. However I notice that on my system SIGKILL is sent immediately after SIGTERM and I guess this is the cause of a non graceful programs termination.

I've found some documentation which (if I read it correctly) states that timeout before sending SIGKILL can be set by TimeoutStopSec= option. Also sending SIGKILL could also be disabled by SendSIGKILL= option. But I cannot find where to configure those options… is there a systemd shutdown / reboot configurations file where I can set those options?

EDIT:

I did some test and I discovered two interesting things:

  1. If I manually close chrome like this killall -SIGTERM chrome, it will not complain that is has not been closed correctly next time I start it again. If I close it like this instead killall -SIGKILL chrome, it will complain. This tells me that chrome is handling SIGTERM correctly.
  2. Looking at the output of my shutdown procedure, systemd prints Sending SIGTERM... immediately followed by Sending SIGKILL...

According to comment below, systemd is handling its processes only. So in my case GDM. This tells me that the issue could be:

  1. either GDM not closing it's child processes (e.g. Chrome) correctly (i.e. by sending SIGTERM to them)
  2. or systemd is sending GDM a SIGKILL message to early not giving it the time to correctly close its children.

Is there a way to check/configure how actually GDM closes its children?

Best Answer

To gracefully shutdown your desktop, you may need to raise the TimeoutStopSec= for GDM, or whatever other display manager you are using.

Related Question