我的 Linux 程序如何在不修改任何系统配置文件的情况下获得计算机即将进入睡眠状态的通知?

How can my Linux program get a computer-is-about-to-go-to-sleep notification, without modifying any system config files?

我写了一个 Linux 程序来创建一些持久的 TCP 连接,我希望我的程序在 Linux- 计算机进入睡眠状态之前关闭()那些 TCP 套接字,这样远程对等端没有留下无响应的 "zombie" TCP 连接。

根据 this 的回答,一种方法是将 /etc/pm/sleep.d 文件修改为 运行 一个特殊的通知应用程序,但我不想这样做这样做是因为修改系统配置文件是有风险的(如果我的程序没有这样做的权限,在很多情况下是不可能的)。

Windows 和 MacOS/X 有针对此类事情的基于 C 的通知 API; Linux-land 有类似的东西吗?

您可以使用systemd-logind a tiny daemon that manages user logins and provides both a C library interface as well as a D-Bus界面。您可以订阅以下信号:

The PrepareForShutdown() resp. PrepareForSleep() signals are sent right before (with the argument True) and after (with the argument False) the system goes down for reboot/poweroff, resp. suspend/hibernate. This may be used by applications for saving data on disk, releasing memory or doing other jobs that shall be done shortly before shutdown/sleep, in conjunction with delay inhibitor locks. After completion of this work they should release their inhibition locks in order not to delay the operation any further.

您还可以查看使用 D-Bus 和 PrepareForSleep() 信号在 Python 中编写的 sample program