拦截系统信号作为防止kill调用生效的策略

拦截系统信号作为防止kill调用生效的策略

作为后续问题,我正确的是(4)(下面引用)是我能到达的最远距离?

在我的应用程序(作为 systemd 守护进程运行的 .NET 应用程序)中,拦截运行kill(可能调用 sigaction)时发送到进程的内核信号,以便忽略终止请求。

并且免责声明仅适用于用户调用kill省略信号号或使用可捕获信号(如默认信号SIGTERM)的情况。
如果用户使用SIGKILL(-9)或任何其他不可捕获的信号调用kill - 这也将达不到要求。

上述假设准确吗?

答案1

是的,这是很正常的。许多程序捕获并处理自己的信号。例如,常见的是:

  • 捕获 SIGTERM、SIGINT 和/或 SIGQUIT,然后刷新并关闭所有打开的文件,并以其他方式优雅地清理和关闭,而不是直接死掉。
  • 捕获 SIGHUP 并重新加载配置文件,和/或关闭并重新打开所有日志文件。或者像对待 SIGTERM 一样对待 SIGHUP。
  • 捕获并适当处理其他可捕获信号 - 毕竟,这就是它们的用途...其他进程向正在运行的程序发送信号。根据程序员的要求,由信号接收进程来处理它们或忽略它们(可能会产生默认结果,例如如果未处理则因 SIGTERM 而被杀死)。

相关内容