【发布时间】:2011-11-15 15:25:24
【问题描述】:
当一个进程(进程 A)终止时,如何清理它分配的所有资源?进程A在使用其他进程提供的服务时,可能会在其他进程空间分配资源(A会使用IPC访问其他进程提供的服务)。
是否有任何可用的标准机制/框架?我的进程在 Linux 环境下运行。
谢谢, 窝
【问题讨论】:
标签: linux ipc process-management resource-cleanup
当一个进程(进程 A)终止时,如何清理它分配的所有资源?进程A在使用其他进程提供的服务时,可能会在其他进程空间分配资源(A会使用IPC访问其他进程提供的服务)。
是否有任何可用的标准机制/框架?我的进程在 Linux 环境下运行。
谢谢, 窝
【问题讨论】:
标签: linux ipc process-management resource-cleanup
某些资源会自动清理。在堆栈或堆上分配的内存、套接字和文件描述符、信号量操作(如果您使用 SEM_UNDO)。
对于您在问题中模糊提到的场景(使用 IPC 从另一个进程 B 访问服务),您需要:
解决#1 的首要方法是进程 B 可以轮询进程 A 的 PID 的存在。显然不理想。更好的解决方案是使用 IPC 方法来检测连接消失的另一端(例如 TCP 套接字)
如果您将进程 A 和 B 与网络上的两台计算机进行比较,典型的解决方案是进程 B 会在进程 A 的每次 API 调用后进行清理,或者会衰减它的连接列表并最终如果在给定的时间后没有收到进程 A 的消息,则超时并清理进程 A 的资源。
【讨论】: