我正在试验 Oracle 会话并尝试捕捉数据库中存在陈旧会话的情况。我在关闭网络后设法做到了这一点 - 数据库会话仍然存在并持有所有已被占用的锁。这很清楚:Oracle 不知道 TCP 会话已中断并且仍在等待请求。
但是另一个试验不起作用:当我连接了客户端并最终通过“kill -9”将其杀死时。我预计与上一个示例中的情况相同(Oracle 中的陈旧会话,因为 TCP 连接仍在服务器端工作) - 但我看到该会话已清除!以及任何锁。我不知道为什么 - SIGKILL 信号预计会杀死进程,而没有任何机会启动任何钩子,例如使用“再见”消息关闭 TCP 等。我怀疑操作系统(MacOs)释放任何 TCP 套接字并在进程终止时发送结束消息,但这只是猜测,我无法证明这一点。
谁知道?