终止进程是否会关闭该进程打开的所有文件?

终止进程是否会关闭该进程打开的所有文件?

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

答案1

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

因此,客户端(访问服务器的进程)肯定会关闭其网络连接端。的行为服务器(“数据库”)当客户(“您的进程”)是否被终止由服务器决定(检测并采取行动)。

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

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

答案2

对,但是...

终止进程会关闭其文件,但对于kill通过套接字或其他方式连接的进程来说,这并不罕见网络连接(例如与数据库一起使用)不会立即成功杀戮的过程。ps例如,您将看到一个正在等待关闭的进程。

答案3

通常,它会杀死该进程打开的所有文件。然而,当某些文件描述符在某个地方被使用时,它肯定不会被关闭。

相关内容