我想终止一个与数据库有打开连接的进程。如果我终止该进程,我可以确保数据库已解锁吗?
答案1
“在调用进程中打开的所有文件描述符、目录流、转换描述符和消息目录描述符都应关闭”。这就是 POSIX 所说的如果进程因信号而退出(即“杀死它”)时应该发生的情况。
因此,客户端(访问服务器的进程)肯定会关闭其网络连接端。的行为服务器(“数据库”)当客户(“您的进程”)是否被终止由服务器决定(检测并采取行动)。
网络连接肯定会在客户端关闭,但服务器在这种情况下对会话做什么就很难说了。如果它在表或表中的行上有锁,那么什么时候应该释放它?
MySQL 有一个空闲会话超时,之后它会释放消失的客户端所持有的锁(请参阅这个 StackOverflow 问题)。您必须查看您使用的特定数据库的文档,以了解可能发生的情况,但我的猜测是,在大多数情况下都会涉及某种形式的空闲计时器。
答案2
对,但是...
终止进程会关闭其文件,但对于kill
通过套接字或其他方式连接的进程来说,这并不罕见网络连接(例如与数据库一起使用)不会立即成功杀戮的过程。ps
例如,您将看到一个正在等待关闭的进程。
答案3
通常,它会杀死该进程打开的所有文件。然而,当某些文件描述符在某个地方被使用时,它肯定不会被关闭。