进程异常终止时的资源清理

2023-12-27

我的问题是,当一个进程异常终止时(通过信号,它可能是 SIGKILL,所以我们无法拦截它),是否有任何保证的顺序或原子性来释放其资源?我特别对文件锁和共享内存感兴趣。

例如:

1) 如果进程持有 2 个文件的锁并异常终止,是否有可能另一个试图锁定相同文件的进程看到一个文件被锁定而另一个文件被解锁?或者从其他进程的角度来看,释放文件锁的过程是原子的吗?

如果它不是原子的,是否至少存在一个预定义的顺序,终止进程将释放文件锁(例如,按照最初锁定的相反顺序)?

2)我想使用文件锁来确保正确的共享内存初始化 - 映射到共享内存的进程将持有共享锁,并且想要映射到同一共享内存段的新进程将尝试测试该锁以查看是否需要执行初始化(如果需要,我可以稍后提供更多详细信息)。

然而,这里出现了同样的问题:如果持有文件锁并映射到共享内存段的进程异常终止,是否有可能在共享内存自动取消映射后,其他进程仍然会看到文件锁被锁定?或者从其他进程的角度来看,取消共享内存段的映射和解锁文件是原子的吗?


正如您的问题所暗示的,这取决于发送到程序的终止信号。 AFIK 这实际上只是杀戮(即kill -kill)将终止进程,而不给进程提供正确关闭自身的机会。其他信号,如 TERM OR SIGINTcan被程序本身挂钩并被忽略,或用于启动一些干净的关闭过程。I guess http://meinit.nl/the-3-most-important-kill-signals-on-the-linux-unix-command-line除非代码中编程了显式的钩子,否则像 SIGHUP 这样最温和的信号不会执行任何操作。所以我不知道你关于文件锁的问题的具体答案,但考虑一下这样一个事实:它可能只是真正的kill -kill你在这里担心的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程异常终止时的资源清理 的相关文章

随机推荐