杀死进程会关闭该进程打开的所有文件吗?

Ale*_*lex 2 kill lock database open-files

我想杀死一个与数据库有开放连接的进程。如果我终止该进程,我可以确保数据库已解锁吗?

Kus*_*nda 7

“在调用过程中打开的所有文件描述符、目录流、转换描述符和消息目录描述符都应关闭”。这就是 POSIX 所说的,如果进程因信号而退出(即通过“杀死它”)。

所以客户端,一个访问服务器的进程,肯定会关闭它的网络连接端。当客户端(“您的进程”)被杀死时,服务器(“数据库”)的行为由服务器决定(检测并采取行动)。

网络连接肯定会在客户端关闭,但是在这种情况下服务器对会话做了什么就很难说了。如果它对表或表中的行有锁,应该什么时候释放?

MySQL 有一个空闲会话超时,之后它会释放消失的客户端持有的锁(请参阅此 StackOverflow 问题)。您将不得不查看您使用的特定数据库的文档以了解可能发生的情况,但我的猜测是在大多数情况下会涉及某种形式的空闲计时器。

  • +1 在我遇到的一个极端情况下,杀死一个嵌入了一个非常长的大事务的数据库客户端导致了巨大的回滚,锁定了对数据库的所有有用访问超过 12 小时。 (2认同)