我正在尝试使用GNOME Shell在ArchLinux中正常关闭/重新启动。现在,当我要求关闭时,它会立即关闭,而没有给打开程序一些时间来正常关闭/保存打开的文件。结果,每当我重新启动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
只要系统配置正确,它就可以执行杀死其所需的操作。您是否正在使用Arch Wiki中推荐的用于chrome的时空解决方案之一?
gnome-session
。