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

前端之家收集整理的这篇文章主要介绍了异常进程终止时的资源清理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题是,当一个进程异常终止时(通过信号,它可能是SIGKILL,所以我们不能拦截它),是否有任何保证的顺序或原子性,其资源被释放?特别是,我对文件锁和共享内存感兴趣.

例如:

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

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

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

但是同样的问题出现在这里:如果一个持有文件锁并且也映射到共享内存段的进程异常终止,那么在共享内存自动取消映射后,另一个进程是否仍然可以看到文件锁被锁定?或者是从其他进程的角度取消映射共享内存段并解锁文件原子?

解决方法

正如您的问题所暗示的,这取决于发送到程序的终止信号. AFIK它实际上只有KILL(即kill -kill)才能终止进程,而不会给进程一个正确关闭自己的机会.其他信号如TERM OR SIGINT可以被程序本身挂钩并被忽略,或用于启动一些干净的关闭过程. I guess像SIGHUP这样最温和的信号不会做任何事情,除非代码中有明确的钩子编程.所以我不知道你关于文件锁的问题的具体答案,但考虑一下这个事实,你可能只是真的杀了 – 你在这里担心.

猜你在找的C&C++相关文章