![拦截系统信号作为防止kill调用生效的策略](https://linux22.com/image/199904/%E6%8B%A6%E6%88%AA%E7%B3%BB%E7%BB%9F%E4%BF%A1%E5%8F%B7%E4%BD%9C%E4%B8%BA%E9%98%B2%E6%AD%A2kill%E8%B0%83%E7%94%A8%E7%94%9F%E6%95%88%E7%9A%84%E7%AD%96%E7%95%A5.png)
作为后续这问题,我正确的是(4)(下面引用)是我能到达的最远距离?
在我的应用程序(作为 systemd 守护进程运行的 .NET 应用程序)中,拦截运行kill(可能调用 sigaction)时发送到进程的内核信号,以便忽略终止请求。
并且免责声明仅适用于用户调用kill
省略信号号或使用可捕获信号(如默认信号SIGTERM
)的情况。
如果用户使用SIGKILL
(-9)或任何其他不可捕获的信号调用kill - 这也将达不到要求。
上述假设准确吗?
答案1
是的,这是很正常的。许多程序捕获并处理自己的信号。例如,常见的是:
- 捕获 SIGTERM、SIGINT 和/或 SIGQUIT,然后刷新并关闭所有打开的文件,并以其他方式优雅地清理和关闭,而不是直接死掉。
- 捕获 SIGHUP 并重新加载配置文件,和/或关闭并重新打开所有日志文件。或者像对待 SIGTERM 一样对待 SIGHUP。
- 捕获并适当处理其他可捕获信号 - 毕竟,这就是它们的用途...其他进程向正在运行的程序发送信号。根据程序员的要求,由信号接收进程来处理它们或忽略它们(可能会产生默认结果,例如如果未处理则因 SIGTERM 而被杀死)。